벌집처럼 육각형으로 이루어져 있는 칸에 적힌 수까지 가려면 몇 개의 방을 지나야 하는지 출력하는 문제 지나가야 하는 방의 개수 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] # 결과값을 오큰수로 바꿔..