코딩 문제 47

백준 1149 - RGB거리

https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 이 문제는 서로 이웃된 집들의 색이 겹치지 않게 칠할 때, 그 최소비용을 구하는 문제이다. 코드를 짜긴 했는데 예제 1~4까지는 정답이 나왔지만, 예제 5에서 오답이 나왔다. 틀린 코드를 리뷰해보자면 def find_case(flag): if flag == 0: return [1, 2] elif flag == 1: return [0, 2] elif flag == 2: retu..

코딩 문제 2023.01.12

백준 1912 - 연속합

https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 해당 문제는 답이 나오긴 했는데 시간 초과 때문에 통과되지 못했다. 뿌엥 그래서 구글링을 해봤더니..굉장히 간결하게.. WOW.. 쩝ㅋ 시간초과 나온 풀이코드는 굉장히 여러 개가 있었는데 그 중 가장 마지막까지 수정한 코드는 다음과 같다. n = int(input()) result = [] flag = 0 nums = list(map(int, input().split())) a = -1e9 maxi = ma..

코딩 문제 2023.01.11

백준 1904 - 01 타일

https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 결론을 얘기하자면, 해당 문제는 피보나치 수열을 이루고 있기 때문에 그냥 피보나치 수열의 n번째 항을 구해서 출력하면 된다. 하지만, 나는 해당 문제가 피보나치 수열을 이루고 있는지 몰랐기 때문에 풀지 못했다. 이번 포스팅에서는 해당 문제가 왜 피보나치 수열을 이루고 있는지에 대한 원리를 설명해보도록 하겠다. 문제를 요약하자면 0은 따로 사용하지 못해서 00 또는 0000 이렇게 두 개의 0을 붙여서 ..

코딩 문제 2023.01.11

백준 14889 - 스타트와 링크

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 답이 나오긴 했는데 시간초과가 계속 떠서 결국 맞추진 못한 문제이다. 쩝,, 정답 코드와 비교해보니 알고리즘은 똑같았는데 함수가 동작할 때 시간을 많이 잡아먹게끔 구현해서 시간초과가 발생했다. 알고리즘 흐름은 다음과 같다. 1. 스타트와 링크 두 팀으로 나눠야하는데 결국 한 팀만 구하면 다른 팀은 자동으로 구해진다. => 0번 팀원을 기준으로(0번 행 기준) 0번 팀원과 같은 팀인 경우 vs 아닌 경우 이렇게 나눴다...

코딩 문제 2023.01.10

백준 14888 - 연산자 끼워넣기

https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 해당 문제는 모든 경우의 수를 탐색하는 브루트포스 탐색 알고리즘의 문제이다. 아직 DFS가 익숙하지 않아서 못 풀었다. 구글링을 해서 풀었는데 어떤 분의 풀이코드가 굉장히 깔끔해서 동일하게 작성해보고자 한다. 알고리즘 사고) 1. 재귀함수를 호출하여 풀이할 것이므로 DFS의 종료조건을 세워야 한다. => 입력받은 숫자를 차례대로 사용할 것이므..

코딩 문제 2023.01.10

백준 2563- 색종이

https://www.acmicpc.net/problem/2563 2563번: 색종이 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 이 문제는 색종이를 입력받아 전체 색종이의 넓이를 구하면 되는 문제이다. 처음에는 전체 색종이의 넓이에서 겹치는 부분을 빼도록 로직을 구현했는데 테스트 예제에서는 답이 잘 나왔지만 아마 겹치는 부분이 많은 경우를 포함시키지 못 해 오답처리 되는 것 같다. 일단 오류 코드는 다음과 같다. def check(xy1, xy2): # 겹치는지 아닌지 체크해주는 함수 x = [i for i in range(x..

코딩 문제 2023.01.07

백준 3053- 택시 기하학

https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 이 문제는 원리를 알기만 하면 매우 간단하게 구현이 가능하다. 레벨은 브론즈3이지만 이 마저도 원리 이해에 대한 난이도 때문에 올라간거지 사실상 입출력 문제이다. 나는 이 문제에 대한 원리를 이해하지 못 해 스스로 풀이하지 못하였으므로 원리에 대한 설명을 중심으로 한 문제 리뷰 포스팅을 작성하고자 한다. 문제 리뷰) 문제를 잘 읽어보면, 기하학의 종류에 따라 두 점 사이의 거리를 측정하는 방법이 다르다는 것을 알 수 있..

코딩 문제 2023.01.06

백준 2057 - 팩토리얼 분해

https://www.acmicpc.net/problem/2057 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 굉장히 많은 시간을 썼는데 풀지 못했다. 문제 설명도 부족한데 예제 입력도 하나만 딸랑 줘놓고 참나 다른 사람의 코드를 보고 간신히 이해했다. 맨 처음엔 이 문제가 입력된 숫자를 중복을 허용하고 팩토리얼들의 합으로 나타낼 수 있는지 없는지를 구하는 문제로 이해를 했다. 그래서 나온 코드는 import math def find_result(n): i = 0 print("i:", i..

코딩 문제 2023.01.04

백준 17103 - 골드바흐 파티션

https://www.acmicpc.net/problem/17103 17103번: 골드바흐 파티션 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. www.acmicpc.net 티스토리에 올려둔 골드바흐를 복습하고나서 새로운 골드바흐 문제가 있길래 시도해봤는데 시간초과가 나서 풀지 못했다. 구글링을 해보며 다른 사람의 코드를 보았는데도 이해하는데 굉장히 많은 시간이 걸렸다.. 실패 코드 리뷰) def sosu(n): # 소수 판별 함수 if n==0 or n==1: return 1 else: for i in range(2, int(n**0.5)+1): if n%i==0: ..

코딩 문제 2023.01.03

백준 9663 - N-Queen

https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 한 시간 넘게 투자했지만 풀지 못하였다. 반복문도 여러 개 썼는데 너무 복잡해서 제대로 풀고 있는게 맞는지 계속 의심이 갔다. 나는 처음에 n*n 보드판이므로 2차원 배열을 선언했다. 하지만 그럴 필요가 없었다. 왜 그런지는 문제 분석을 하면서 설명하도록 하겠다. 다른 사람의 풀이를 보니 의외로 간단했다. 두 가지 풀이법이 있었는데 나는 1번을 선택했다. 1. 1차원 배열을 선언한 후, 배열에 퀸의 위치를 담는 ..

코딩 문제 2022.10.17