본문 바로가기

코딩 테스트

(65)
[백준 1193번 파이썬] 분수찾기 입력받은 숫자 번째에 위치한 분수를 출력해주면 되는 문제이다 여기에서 숫자 번째는 이 표와 같이 지그재그로 세는 것으로 첫 번째는 1/1, 두 번째는 1/2, 세 번째는 2/1, 네 번째는 3/1과 같은 형식을 띤다 num = int(input()) line = 0 max_num = 0 while num > max_num: line += 1 max_num += line gap = max_num - num if line % 2 == 0: top = line - gap under = gap + 1 else: top = gap + 1 under = line - gap print(f'{top}/{under}') 이 챕터에서는 문제 속에 있는 수식을 찾아내는 게 주된 것으로 이번 문제에서 우리가 찾아야 한 것은 ..
[백준 2292번 파이썬] 벌집 이번 문제는 꽤 복잡해 보이는 수식을 직접 찾아내야 하는 문제이다 일단 1이라고 적혀 있는 정가운데에서 입력값이 적혀 있는 위치까지 몇 칸을 지나가는지만 출력하는 코드를 작성하면 된다 num = int(input()) nums_bee = 1 count = 1 while num > nums_bee: nums_bee += 6 * count count += 1 print(count) 문제에 나와 있는 벌집 문양에서 1부터 7번 방 방향으로 나 있는 모든 방을 확인해 보면 1 - 7 - 19 - 37 - 61 즉, 숫자들 사이의 차이가 6 - 12 - 18 - 24 만큼 나게 된다 이렇게 되면 숫자들 사이에 6의 배수라는 규칙을 발견할 수 있고 위의 정답 코드는 이런 성질을 이용해서 작성한 것이다 6의 배수를 ..
[백준 1712번 파이썬] 손익분기점 이번 문제는 고정 비용, 가변 비용, 책정된 가격을 순서대로 입력받고 이 가격들을 이용해 손익분기점을 계산하면 된다. 여기에서 손익분기점은 고정 비용 + 물건 하나 당 붙는 가변 비용의 값을 넘기는 팔린 n 개의 물건 개수, 즉 n을 의미한다 A, B, C = map(int, input().split()) if B >= C: print("-1") else: print(A//(C-B)+1) 쉽게 이해해 보자면 고정 비용은 불변하지 않고, 추가되지 않는 비용이다 가변 비용은 한 대를 생산할 때마다 반복적으로 발생하는 비용이기 때문에 n개의 물건을 팔아 C*n 만큼의 수익이 난다고 해도 A + B*n 만큼의 돈이 생산 비용으로 빠져나감을 의미한다 즉, C가 B보다 작은 비용으로 책정된다면 몇 만 개의 물건을 ..
[백준 1316번 파이썬] 그룹 단어 체커 이번 문제는 쉽게 표현해서 입력받은 개수만큼의 문자열 중에서 반복되는 문자가 없거나, 혹은 있지만 떨어져 있지 않고 붙어 있는 문자열일 경우에만 '그룹 단어'라고 부르는데 이 그룹 단어의 개수를 출력하면 되는 것이다 num = int(input()) count = 0 for _ in range(num): word = input() error = 0 for i in range(len(word)-1): if word[i] != word[i+1]: new_word = word[i+1:] if new_word.count(word[i]) > 0: error += 1 if error == 0: count += 1 print(count) 정답 코드가 조금 복잡해 보이지만 word에 i 번째 문자와 i+1 번째 문자를..
[백준 2941번 파이썬] 크로아티아 알파벳 이번 문제는 입력받은 문자열을 사용자가 가지고 있는 변경 '표'에 의해 크로아티아 알파벳으로 변경했을 때 크로아티아 알파벳 상에서 몇 개의 문자로 구성된 문자열이었는지를 출력하기만 하면 된다 alpha = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] word = input() for i in alpha: word = word.replace(i, 'a') print(len(word)) 이전 문제처럼 문제 속에 주어진 문자열을 미리 리스트 형태로 저장하고 진행해야 한다 그리고 리스트 속에 있는 문자가 문자열에 있을 때마다 해당 문자를 replace 함수를 이용해 a로 변경해준다 그렇게 되면 크로아티아 알파벳이 존재할 때마다 a로 변경해주는 셈이기 때문에 마지막에는..
[백준 5622번 파이썬] 다이얼 다이얼 속에 있는 문자를 출력할 때 소요되는 시간을 출력하면 되는 문제이다 여기에서 다이얼 속에 있는 문자는 속해 있는 숫자의 +1 만큼의 초 시간이 소요된다 dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] word = input() time = 0 for unit in dial: for i in unit: for k in word: if i == k: time += dial.index(unit) + 3 print(time) 다이얼 속 문자 같은 건 사진으로만 주어져 있기 때문에 실제로 코드 안에서 사용하려면 직접 리스트로 만들어 줘야 한다 1부터 9까지 위치에 (실제 위치는 0부터 계산하기 때문에 0~8이다) 해당하는 문자들을 차례대..
[백준 2908번 파이썬] 상수 이번 문제는 입력값으로 두 수가 들어오는데, 이 두 수를 각자 반대로 읽어 저장한 뒤 더 큰 수를 출력한다 즉, 376이 들어가면 673으로 저장하고, 912은 219로 저장한다. 들어왔을 때의 수와는 상관없이 리버스한 수로 최댓값을 구한다는 의미이다 A, B = input().split() A = int(A[::-1]) B = int(B[::-1]) if A > B: print(A) else: print(B) 문자열 옆에 붙는 [::-1]은 문자열 자체를 리버스해주는 내용으로 각각 자기 자신을 리버스한 뒤 if문으로 더 큰 값을 출력해주면 되는 간단한 코드이다
[백준 1152번 파이썬] 단어의 개수 이번 문제는 매우 간단하다 입력값으로 문자열이 들어오면 공백으로 구분된 단어가 몇 개인지만 출력해주면 되는 문제이다 print(len(input().split())) split() 함수를 사용해서 입력값들을 공백 기준으로 자르기만 해도 이를 len() 함수를 이용해 몇 개의 단어로 잘렸는지 쉽게 출력할 수 있다