손익분기점이 어떻게 형성되는지 하나의 식으로 나타내보면 A + nB A/(C-B) 보다 큰 자연수 주의해야 할 점은 C = B가 되어 0으로 나누는 에러가 발생하지 않도록 하는 것! import sys A, B, C = map(int, sys.stdin.readline().split()) if C != B: if A/(C - B)
뭐야 쉽네~ 하고 V에 도달할 때까지 루프 돌렸다간 달팽이가 나무에 오를때까지 끝나지 않는다..^^.. 999999901을 기다릴 수도 있다..^^ 다시 생각해보자 달팽이는 하루에 A - B 만큼 올라간다. 그리고 달팽이가 올라가야 하는 길이는 V - B 이다. (마지막에는 미끄러지지 않기 때문에 B만큼을 줄여야 한다.) 올라가야 하는 길이를 하루에 올라가는 길이로 나누고, 나머지를 본다. 나머지가 0이 아니라면 하루가 더 필요한 것이다. import sys A, B, V = map(int, sys.stdin.readline().split()) if (V - B) % (A - B) == 0: print((V - B) // (A - B)) else : print(((V - B) // (A - B)) + 1)
들어오는 정보를 나이순으로 정렬한 다음 나이가 같으면 들어온 순서대로 출력하는 문제! lambda 정렬을 이용해 풀었다 import sys N = int(input()) A = [] for i in range(N): a, b = map(str, sys.stdin.readline().split()) # 나이와 이름을 먼저 a, b에 저장하고 a = int(a) # a는 int로 변환해주고 A.append((a, b)) # A에 (a, b) 형태로 저장 A.sort(key=lambda x: (x[0])) # A안의 리스트들을 x[0] 즉 나이를 이용해 정렬해준다 for i in A: print(i[0], i[1])
0, 0, 0이면 break 숫자 세 개 주어지면 피타고라스 법칙 되는지만 확인하면 끝! import sys while True: A = list(map(int, sys.stdin.readline().split())) A.sort() if A[0] == A[1] == A[2] == 0: break else: if A[2] ** 2 == A[0] ** 2 + A[1] ** 2: print('right') else: print('wrong')
벌집처럼 육각형으로 이루어져 있는 칸에 적힌 수까지 가려면 몇 개의 방을 지나야 하는지 출력하는 문제 지나가야 하는 방의 개수 2개 : 2, 3, 4, 5, 6, 7 - 6개 지.방.개. 3개: 8, 9, 10, 11, ... 19 - 12개 지.방.개. 4개: 20 ~ 37 - 18개 6씩 늘어난다 X = int(input()) a = 1 six = 6 cnt = 1 while X > a : cnt += 1 a = a + six six += 6 print(cnt) X는 주어진 수 a는 지.방.개.가 cnt개일 때 할당되는 수 중 가장 큰 수 (예를 들어, cnt = 2이고 a = 7일 때 2~7까지는 지.방.개.가 2개(=cnt)이다.) six는 늘어나는 수의 개수.. 즉 6, 12, 18 이렇게 늘어..
주어진 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 알아보는 문제 하나하나 확인해봐야하는 줄 알았는데, 미리 크로아티아 알파벳에 해당하는 문자열을 저장해놓고 input으로 받은 문자열 안에 포함되어있는지 확인해보면 되는 문제였다 X = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] # 크로아티아 알파벳 저장 T = input() for i in X: # 크로아티아 알파벳에 해당하는 문자열이 나오면 T = T.replace(i, '0') # 기존 문자열 -> 문자 한 개로 교체 print(len(T))
같은 숫자에 해당된 글자끼리 리스트를 만들고 그 리스트에 해당되면 time에 시간을 추가하는 방식으로 해결했다. import sys T = list(map(str, sys.stdin.readline().rstrip())) # input값 리스트로 저장 X = [[], ['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I'], ['J', 'K', 'L'], ['M', 'N', 'O'], ['P', 'Q', 'R', 'S'], ['T', 'U', 'V'], ['W', 'X', 'Y', 'Z']] time = 0 # 시간 초기화 for i in T: if i in X[1]: time += 3 elif i in X[2]: time += 4 elif i in X[3]: time +..
서로 연결되었는지 확인하기 위해 각 번호의 컴퓨터에 연결되어있는 컴퓨터를 나타내는 리스트를 만든다 import sys N = int(sys.stdin.readline()) M = int(sys.stdin.readline()) # 컴퓨터 각각에 연결되어 있는 컴퓨터 번호의 리스트 adj = [[] for _ in range(N + 1)] # 연결되어있는 정보가 주어지면 각각의 컴퓨터 번호의 리스트에 저장 for i in range(M): a, b = map(int, sys.stdin.readline().split()) adj[a].append(b) adj[b].append(a) for i in range(N+1): adj[i].sort() visited = [0 for _ in range(N + 1)] s..
회전하는 큐 왼쪽으로 돌릴 때는 index가 0인 원소를 뒤에 넣고 앞을 삭제, 오른쪽으로 돌릴 때는 index가 -1인 원소를 앞에 넣고 뒤를 삭제하면 된다 import sys N, M = map(int, sys.stdin.readline().split()) K = list(map(int, sys.stdin.readline().split())) A = [i for i in range(1, N + 1)] cnt = 0 for i in range(M): A_len = len(A) A_index = A.index(K[i]) if A_index < A_len - A_index: while True: if A[0] == K[i] : del A[0] break else : A.append(A[0]) del A[0..
스택 문제인데 주어진 수열이 아닌 수열의 인덱스를 스택에 넣어야 하는 문제 import sys N = int(sys.stdin.readline()) A = list(map(int, sys.stdin.readline().split())) # 수열 입력받기 result = [-1 for _ in range(N)] # 결과값 저장 (오큰수가 없으면 -1이므로 미리 -1로 설정해놓는다) stack = [] # index를 저장할 스택 stack.append(0) # 첫번째 index 0을 저장한다 for i in range(1, N): while stack and A[stack[-1]] < A[i]: # 스택이 비어있지 않고 오큰수가 있다면 result[stack[-1]] = A[i] # 결과값을 오큰수로 바꿔..