본문 바로가기

분류 전체보기

(63)
BOJ 2292 : 벌집 위와 같은 벌집에서 입력되는 해당 번호를 찾아가려면 최소 몇 개의 방을 지나야 하는지를 계산하는 문제이다. if __name__ == '__main__': y = int(input()) n = 1 count = 0 while n: if 3*count*(count+1) + 1 < y
BOJ 1316 : 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우 만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. def d_check(data): new_data = [] for i, d in enumerate(data): if d not in new_data: new_data.append(d) else: if d != new_data[-1]: return 0 return 1 if __name__ == '__main__': N ..
BOJ 2941 : 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. data = input() new_data = [] for i, n in enumerate(data): if n == '=': if data[i-1]..
BOJ 2908 : 상수 상수는 바보라서 문자를 뒤집어 읽는다고 한다. A, B를 받아서 각각 뒤집어 입고 그 중 큰 수를 뒤집어서 출력해라. A, B = input().split() A = ''.join(reversed(A)) B = ''.join(reversed(B)) if int(A) > int(B): print(A) else: print(B) 문자열을 뒤집으려니 for문 밖에 기억이 안났다. 가장 저렴한 방법 같아서 새로이 찾아보니.. reversed()와 join을 이용해서 만드는 방법이 있었다. 또 [start:stop:step]의 기본 원리를 이용해서 [:,:,-1]로 출력할 수 있다.
BOJ 2675 : 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다. N = int(input()) for i in range(N): new_data = [] num, data = input().split() for i in list(data): new_data.append(i*int(num)) new_data = "".join(new_data) print(new_data) 조금 바보 같지만, 빈 문자를 선언하고 기존 문자 리스트를 join하는 방법으로 문제를 해결했다. 더 단순하게 한 사람들도 많다. 추가..
BOJ 1065 : 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. def hansu(N): if len(N) >= 2: diff_temp = int(N[0]) - int(N[1]) else: diff_temp = int(N[0]) for i in range(1, len(N) - 1): if diff_temp == int(N[i]) - int(N[i+1]): diff_temp = int(N[i]) - int(N[i+1]) else: return return N if __name__ == "__main__": N = int(in..
BOJ 4673 셀프넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 생성자가 없는 숫자를 셀프 넘버라고 한다. 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오. def num_make(d): num = 0 for x in range(len(d)): num += int(d[x]) return (num + ..
while 과 try, except를 적절하게 사용. while True: try: A, B = map(int, input().split()) print(A+B) except: break 무한 반복문을 구성할 때, 위와 같이 몇 개의 인자가 들어올 지 모르는 상황에서 반복문을 사용한다면? →try, except 구문으로 해결하는 방법이 있다.