본문 바로가기

코드연습

(48)
BOJ 10250 : ACM 호텔 그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림 위와 같이 생긴 호텔에서 방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다. 여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다. import sys if __name__ == '__main__': num = int(..
BOJ 2869 : 달팽이는 올라가고 싶다. 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. import sys import math if __name__ == '__main__': A, B, V = map(int, sys.stdin.readline().split()) day = (V - B) / (A - B) print(math.ceil(day)) 대충 계산을 해보면, V 만큼에서 자는 동안 마지막 날 내려오는 B 만큼을 뺀 것을, 하루에 올라가는 양(A-B)를 나누어서 올림 연산하면 된다. 2..
BOJ 1193 : 분수찾기 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. if __name__ == '__main__': x = int(input()) sum_n = 0 n = 0 while not (n-1*(n)/2 < x
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하는 방법으로 문제를 해결했다. 더 단순하게 한 사람들도 많다. 추가..