Algorithm/SW Expert Academy 78

[Python] 4880. 토너먼트 카드 게임

asdf # 가위바위보 (1: 가위, 2: 바위, 3: 보) def game(c1, c2): # 가위바위보 버전 1 # c1이 이겼을 경우 혹은 비겼을 경우(c1이 인덱스가 작으므로 c1 반환) if cards[c1] == cards[c2] or cards[c1] % 3 == (cards[c2] + 1) % 3: return c1 # c2가 이겼을 경우 return c2 # 가위바위보 버전 2 # if (cards[c1] - cards[c2]) % 3 == 2: # return c2 # return c1 # 가위바위보 버전 3 # if cards[c1] == 1: # return c2 if cards[c2] == 2 else c1 # elif cards[c1] == 2: # return c2 if car..

[Python] 4874. Forth

tc = int(input()) for idx in range(1, tc+1): expression = list(input().split()) stack = [] result = 'error' # 결과 저장 변수 for e in expression: # e가 숫자일 경우 stack에 push. 나중 연산 편하게 하기 위해 int로 변환 if e.isdigit(): stack.append(int(e)) # e가 숫자 아닐 경우. 그리고 stack에 뽑을 숫자 있을 경우. elif stack: # 숫자 하나 뽑는다 num1 = stack.pop() # e가 연산자일 경우 if e in '*/+-' and stack: # 숫자 하나 더 뽑아와서 e에 해당하는 연산자에 맞게 계산 후 stack에 push num..

[Python] 1224. 계산기3

# 중위 표기법 -> 후위 표기법 변환 def infix_to_postfix(expression): cal = '' # 후위 표기법 받을 문자열 stack = [] # 스택 for e in expression: # e가 숫자라면 cal에 더하기 if e not in '(*/+-)': cal += e # e가 연산자라면 else: # e가 여는 괄호라면 stack에 push if e == '(': stack.append('(') # e가 '*' 또는 '/' 라면 elif e in '*/': # 스택 top의 연산자의 우선순위가 e의 우선순위보다 작을 때까지 # stack pop 하여 가져와서 cal에 더하기 while stack and stack[-1] in '*/': cal += stack.pop() #..

[Python] 1223. 계산기2

# 중위 표기법 -> 후위 표기법 변환 def infix_to_postfix(expression): cal = '' # 후위 표기법 받을 문자열 stack = [] # 스택 for e in expression: # e가 숫자라면 cal에 더하기 if e.isdigit(): cal += e # e가 연산자라면 else: # e가 '*' 라면 if e == '*': # 스택 top의 연산자의 우선순위가 e의 우선순위보다 작을 때까지 (+가 나올때까지) # stack pop 하여 가져와서 cal에 더하기 while stack and stack[-1] == '*': cal += stack.pop() # 이제 없다면 stack에 e를 push 한다. stack.append(e) # e가 '+' 라면 elif e ..

[Python] 삼성시의 버스노선

t = int(input()) for idx in range(1, t+1): print('#{}'.format(idx), end=' ') # 버스 노선 n개 n = int(input()) # 버스 노선 받아오기 bus_lines = [] for _ in range(n): d, a = map(int, input().split()) # 출발 노선, 도착 노선 bus_lines.append(list(range(d, a+1))) # d이상, a 이하인 모든 정류장을 다니므로 해당 정류장을 리스트로 만들어 넣어준다. # 검토할 버스 정류장 p개 p = int(input()) for _ in range(p): c = int(input()) # 버스 정류장 cnt = 0 # 버스 정류장을 지나는 버스 노선의 개수 #..

[Python] 5432. 쇠막대기 자르기

t = int(input()) for idx in range(1, t+1): iron_bar = list(input())[::-1] # pop사용할건데 걍 편하게 생각하기 위해 뒤집어줌. temp_bar = 0 # 쇠막대기가 생기면 count total_bar = 0 # 총 쇠막대기 개수 b1 = iron_bar.pop() # 괄호 받아오기 while iron_bar: b2 = iron_bar.pop() # 괄호 받아오기 # 만약 받아온 괄호 두개가 '()'으로 레이저라면 if (b1, b2) == ('(', ')'): total_bar += temp_bar # 생성된 막대기들만큼 조각나니까 총 쇠막대기 개수에 더해주기 b1 = iron_bar.pop() # 레이저의 다음 괄호로 넘어간다. # 레이저 아..

[Python] 4408. 자기 방으로 돌아가기

# 방으로 들어가 def goback(s_room, e_room): # 출발 방에서 도착 방까지 해당 루트에 +1 해주기 for i in range(s_room, e_room+1): room[i] += 1 t = int(input()) for idx in range(1, t+1): n = int(input()) # 복도 만들어주기 # 방이 두 줄로 되어있으므로 복도의 길이는 200 room = [0 for _ in range(201)] for _ in range(n): # 출발 방, 끝 방 받아오기 # 인덱스 편하게 사용하기 위해 방 +1 해주었다. (예. 1번방은 //2 해주면 0이 되므로 ) # 방이 두 줄이므로 //2 해준다. s_room, e_room = map(lambda x: (int(x)+1..

[Python] 1974. 스도쿠 검증

for idx in range(1, t+1): # 스도쿠 판 받아와서 만들기 board = [] for _ in range(9): board.append(list(map(int, input().split()))) answer = 1 # 3 * 3 작은 격자 9개 만들기 square = [[[] for _ in range(3)] for _ in range(3)] for i in range(9): garo = [] # 가로 줄 sero = [] # 세로 줄 for j in range(9): # 만약 검토하려는 숫자가 이미 가로 또는 세로 도는 작은 격자 안에 있다면 0. 바로 중단 if (board[i][j] in garo) or (board[j][i] in sero) or (board[i][j] in sq..