언어: python 번호: 1904 제목: 01타일 등급: 실버 3 풀이: N=1 > 1 N=2 > 00, 11 N=3 > 100, 001, 111 N=4 > 0000, 0011, 1001, 1100, 1111 N=5 > 10000, 00100, 11100, 00001, 00111, 10011, 11001, 11111 N=i일때 N=i-1일 때와 N=i-2일때를 보면 규칙을 찾을 수 있다. N=i일때 N=i+1인 2진 수열을 만드려면, 앞에서 만든 2진 수열에 1을 붙이거나, 1을 떼고 00을 붙여야 한다. 이때 N-1인 수열의 뒤에 1을 붙이고, N-2인 수열 뒤에 00을 붙이면 중복 없이 새로운 2진 수열을 만들 수 있다. 길이가 N인 모든 2진 수열의 개수는 N번째 피보나치 수와 같다. ..
언어: python 번호: 1010 제목: 다리 놓기 등급: 실버 5 풀이 과정: 테스트 케이스 t를 입력받아 for 문으로 출력을 t 번 반복한다. 강의 서쪽과 동쪽에 있는 사이트의 개수 n, m을 입력받는다. n 개와 m 개의 점을 연결하는 것과 같으니 이는 조합이라 할 수 있다. 조합을 구하기 위해 math 함수를 이용할 수 있지만 나는 함수 없이 구현해 보았다. n과 m 이 같은 경우, n이 1인 경우로 나누어 계산했다. 코드: # 1010 t = int(input()) for i in range(t): result = 1 n, m = map(int, input().split()) if n==m: print(1) continue elif n==1: print(m) continue for..
언어: python 번호: 7568 제목: 덩치 등급: 실버 5 풀이 과정: 전체 사람의 수 n을 입력받고, n명의 등수를 나타내는 리스트인 result를 만든다. 각 사람의 몸무게와 키를 입력받아 2차원 리스트로 만든다. 덩치가 클수록 등수가 높으니, 덩치가 작을수록 등수의 숫자가 커진다. 따라서 2중 for문으로 비교해 덩치가 더 작을때 등수에 1을 더한다. 가장 큰 사람은 등수가 0이 되는데, 1등부터 등수를 매겨야하니 각 등수에 1씩 더한다. 코드: # 7568 l = [] result = [] n = int(input()) for i in range(n): result.append(0) for i in range(n): x, y = map(int, input().split()) l.a..
언어: python 번호: 2798 제목: 블랙잭 등급: 브론즈 2 풀이 과정: 카드의 개수 n과 정수 m을 입력받는다. n장의 카드를 입력받으면서 리스트로 만든다. 3중 for문으로 돌면서 각 카드가 다른 경우에만 합을 구한다. 합이 max보다 크고, m보다 작으면 max에 할당한다. 이를 반복해 최댓값을 찾는다. 코드: # 2798 n, m = map(int, input().split()) num_list = list(map(int, input().split())) max = 0 num_sum = 0 for i in num_list: for j in num_list: for k in num_list: if i!=j and j!=k and i!=k: num_sum = i+j+k if ma..
언어: python 번호: 2839 제목: 설탕 배달 등급: 실버 4 풀이 과정: 설탕의 무게 n을 입력 받아 0이 될때까지 while문을 돌린다. 상근이는 최대한 적은 봉지를 들고 가려고 하기 때문에 가능한 5kg 봉지를 가져가야 한다. n이 3과 5로 나누어지는 수라고 할때, 3을 먼저 빼고 나머지를 5로 나눈다고 생각하면 된다. while문을 돌때마다 5로 나누어지는지 확인하고, 나눠지지 않으면 3을 뺀다. 3과 5로 나누어지지 않는 수에 3을 빼다보면 0보다 작은 수가 나오고, 이 때는 -1을 출력한다. 코드: # 2839 , n = int(input()) count = 0 while n >= 0: if n%5==0: count += int(n/5) print(count) break..
언어: python 번호: 2292 제목: 벌집 등급: 브론즈 2 풀이 과정: 벌집 그림을 보면서 정 가운데 1을 중심으로 주변 한 바퀴씩 숫자를 셌다. 1 > 1칸 2~7 > 6칸 8~ 19 > 12칸 20~ 37 > 18칸 38 ~ 61 > 24칸 으로 한바퀴를 돌때마다 한 줄이 6칸씩 늘어나는 것을 알 수 있다. 입력 받은 수 n이 해당 줄에서 가장 큰 수 k보다 커질때까지 한 바퀴씩 돌면서 지나는 방의 수i를 1씩 더한다. 6*0 = 0이어서 k는 0이 아닌 1부터 시작했다. 코드: # 2292 n = int(input()) i = 1 k = 1 while n > k: k += 6*i i += 1 print(i)
언어: python 번호: 1712 제목: 손익분기점 등급: 브론즈 2 풀이 과정: 이익이 생기려면 물건을 팔 때마다 수입이 지출보다 커야 한다. 같거나 작으면 이익이 발생하지 않는다. 따라서 가변 비용 b가 물건 가격 c보다 크거나 같으면 손익분기점이 존재하지 않아 -1을 출력한다. 손익분기점이 존재할 경우에는 (총비용/물건을 팔 때마다 생기는 이익) 초과부터 손익분기점이다. 물건의 개수는 정수이니 int(a/(c-b)+1))을 출력한다. 코드: # 1712 a, b, c = map(int, input().split()) if b >= c: print(-1) else: print(int(a/(c-b)+1)) 메모: 맨 처음에는 while 문으로 문제를 풀려 했는데 -1을 출력하는 부분이 ..
언어: python 번호: 5622 제목: 다이얼 등급: 브론즈 2 풀이 과정: 전화기의 다이얼 모양에 따라 같은 알파벳끼리 묶어 리스트를 만든다. 입력받은 단어의 각 알파벳이 리스트 안에 몇번째로 있는지 위치를 구해 더한다. 리스트는 0번째부터 시작하는데, 예를 들어 A는 다이얼의 2번으로 3초가 걸리니 3을 더해 계산한다. 코드: # 5622 s = input() a = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] result = 0 for i in s: for j in a: if i in j: result += a.index(j) + 3 print(result) 메모: list.index('찾고자하는 요소', 시작점, 종료점..