목록파이썬 (45)
STUDY_SEONMIN
이 호텔은 먼저 온 순서대로 손님들이 방을 배정받습니다. 각층 1호실부터 시작해서 1호실이 다 차면 2호실, 2호실이 다 차면 3호실 순으로 배정을 받습니다. ex) 2층, 각 층 3개 호실일 때 순서 101-> 201 -> 102 -> 202 -> 103 -> 203 호텔의 층수 H, 층별 객실 수 W, 손님의 입장 번호 N(몇 번째 손님인가를 의미) 가 주어졌을 때 해당 손님이 사용하게 되는 방의 번호를 출력하세요. T = int(input()) for _ in range(T): H, W, N = map(int, input().split()) floor = H if N % H == 0 else N % H rnum = N // H if N % H == 0 else N // H + 1 print('{}'..
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. A, B, V = map(int,input().split()) d = (V-A)//(A-B) if (V-A)%(A-B) == 0: print(d + 1) else: print(d + 2) 달팽이가 하루에 이동하는 거리는 낮에 +A 밤에 -B 만큼해서 총 A-B 입니다. 단, 마지막 날에는 A만큼 올라가서 목표 지점에 도착하면 B만큼 내려오는 것은 계산을 하지 않아야 합니다. 이 점을 고려해 막대의 높이가 ..
무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 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번째 분수를 구하는 프로그램을 작성하시오. X = int(input()) n = 1 while X > (n*(n+1)/2): n += 1 d = int(n*(n+1)/2) - X if n % 2 == 0: print('{}/{}'.format(n-d,1+d)) else: pr..

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. N = int(input()) n = 1 while N > (3*n**2-3*n+1): n += 1 print(n) 중앙의 방부터 시작해서 n개의 방을 지나서 도착할 수 있는 방 중 가장 큰 방의 값은 $3n^2 - 3n + 1$입니다. 따라서 임의의 방 번호 N이 주어졌을 때 몇 개의 방을 지나야 하는 가는..
고정비 A, 변동비 B, 상품판매단가 C가 주어졌을 때 최초로 이익이 발생하는 판매량(손익분기점)을 출력하세요. 만약 손익분기점이 존재하지 않으면 -1을 출력합니다. A, B, C = map(int,input().split()) if B >= C: print(-1) else: print(int(A/(C-B))+1) 우선 손익분기점이 존재하지 않는다는 것은 변동비가 판매단가보다 크거나 같아 손해가 발생하는 경우를 의미합니다. 따라서 B >= C 인 경우에는 -1을 출력하도록 하였습니다. 그 외의 경우에는 손익분기점이 반드시 존재하게 되는데, A+B*n < C*n 을 만족하는 가장 작은 정수 n을 구하는 문제로 볼 수 있습니다. A/(C-B) 가 나누어 떨어진다면 그 몫은 정확히 손익이 0이 되는 지점을 의..
그룹 단어란 단어에 존재하는 모든 문자에 대해서 각 문자가 연속해서 나타는 경우를 말합니다. 예를 들면 ccazzzzbb는 c, a, z, b 각 문자가 모두 연속해서만 나타나므로 그룹 단어입니다. 하지만 aabbbccb는 b가 떨어져서 나타나므로 그룹 단어가 아닙니다. 첫째 줄에 단어의 개수를 입력받고, 입력 받은 단어들 중에서 그룹 단어가 몇 개인지를 출력하는 프로그램을 작성하세요. N = int(input()) ans = [] for _ in range(N): S = input() is_group = True for s in S: if S.count(s) > 1: idx1, idx2 = S.index(s), len(S) - S[::-1].index(s) if S[idx1:idx2] != s*(idx..

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력하세요. 위에 나온 문자들을 제외하고는 다른 알파벳들은 영어 알파벳처럼 한 개로 간주합니다. 그리고 dz=는 무조건 하나의 알파벳으로 쓰이고 d와 z=가 분리된 것으로 보지 않습니다. croatian = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] S = input() i = 0 cnt = 0 while i < len(S): if S[i:i+3] in croatian: cnt += 1 i += 3 elif S[i:i+2] in croatian: cnt += 1 i += 2 else: cnt += 1 i += 1 print(cnt) 입력된 문자열에서 위의 도표에 있는 크로아티아 알파벳이 등..
전화 다이얼에는 입력하려는 숫자마다 문자가 할당되어 있습니다. 상근이의 할머니는 전화번호를 각 숫자에 해당하는 문자로 외우고 있습니다. 예를 들어 UNUCIC는 868242번이 됩니다. 그리고 다이얼 전화기로 저 번호에 전화를 하기 위해서는 총 ((8+6+8+2+4+2)+6) 해서 총 36초가 걸립니다. 어떤 문자열이 주어질 때 다이얼 전화기로 전화 하기 위해 필요한 시간을 출력해주세요. dials = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ'] S = input() phone_number = '' for s in S: for dial in dials: if s in dial: number = dials.index(dial)+2 phone_nu..
상근이의 동생 상수는 숫자를 다른 사람들과는 거꾸로 읽습니다. 예를 들어, 734와 893이 칠판에 적혀있으면 상수는 이 수들을 437과 398로 읽습니다. 따라서 두 수 중 큰 수를 물어보면 상수는 437을 큰 수라고 대답합니다. 두 수가 주어졌을 때 상수의 대답을 출력하는 프로그램을 작성하세요. A, B = input().split() A, B = int(A[::-1]), int(B[::-1]) print(A if A > B else B) 문자열 데이터는 [::-1]과 같이 슬라이싱하면 원래의 문자열이 아닌 역순으로 구성된 문자열이 됩니다. 따라서 상수가 읽는 것처럼 문자열을 역순으로 바꿔 숫자형 자료로 변경하면 상수의 대답을 알아낼 수 있습니다. print 안에 쓰인 것은 삼항연산자로 간단한 if ..
영어 대소문자 띄어쓰기만으로 이루어진 문자열이 주어집니다. 이 문자열에는 몇 개의 단어가 있을가요? 이를 구하는 프로그램을 작성하세요. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 하고 단어는 띄어쓰기 한 개로 구분됩니다. S = input() print(len(S.split())) 문자열의 split()메서드의 인자에 아무런 값을 넣어주지 않으면 기본적으로 한 개의 white space를 기준으로 문자열을 쪼갭니다. 문제에서 요구하는 바가 공백을 기준으로 단어를 나누는 것이기 때문에 이와 같은 방법으로 단어의 갯수를 알 수 있습니다.