Algorithm 211

[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..

[Python] 1961. 숫자 배열 회전

풀이 1) 행렬을 90도 돌리면서 값 구하기 # 받은 행렬 90도 돌려주는 함수 def revolution_90(matrix): # 빈 행렬 만들기 new_matrix = [[0 for _ in range(n)] for _ in range(n)] # 90도 돌리기 for i in range(n): for j in range(n): new_matrix[j][n-i-1] = matrix[i][j] # ['1', '2', '3'] 이면 '123' 의 형태로 출력해야하기 때문에 붙여서 넣어주었다. complete = [''.join(line) for line in new_matrix] return complete def revolution_90_simple(matrix): new_matrix = [] for i..

[Python] 1859. 백만장자 프로젝트

구현 코드 # 매도 def sell(benefit, today, buy): # 산거 다 팔때까지 반복 while buy: # 오늘 포인트에서 샀던거 차이 만큼 더해주기 benefit += (today - buy.pop()) return benefit t = int(input()) for idx in range(1, t+1): n = int(input()) # pop 사용할거기 때문에 받아온 매매가들을 뒤집어 준다. deal = list(map(int, input().split()))[::-1] buy = [] # 매수한 리스트 benefit = 0 # 이익 max_point = max(deal) # 최고 주가 while deal: today = deal.pop() # 오늘 주가 # 오늘 매매가가 최고 주..

[Python] 9020. 골드바흐의 추측

# 에라토스테네스의 채로 소수인지 판별 해놓기 is_prime = [True for _ in range(10001)] for i in range(2, 10001): if i*i > 10000: break if not is_prime[i]: continue for j in range(i*i, 10001, i): is_prime[j] = False tc = int(input()) for _ in range(tc): N = int(input()) s = N//2 # 반으로 쪼개기 e = N//2 # 같은 수 두번 더했는데 답인 경우 if is_prime[N//2]: if s + e == N: print(s, e) else: # 포인트 두개로 한칸씩 옮겨주며 답을 찾는다. 왜냐면 중간에서 같은 차이만큼 떨어져 ..

Algorithm/Baekjoon 2021.09.14

[Python] 21919. 소수 최소 공배수

# 소수인지 판별하는 함수 def is_pn(n): for i in range(2, n): if i * i > n: # 이 뒤는 볼 필요도 없어 break if n % i == 0: # 소수가 아니라면 ? False 반환 return False return True n = int(input()) # 수열의 길이 numbers = set(map(int, input().split())) # 입력받는 수열 answer = 1 for n in numbers: if is_pn(n): answer *= n if answer == 1: # 소수 없어 print(-1) else: print(answer) * 수열 리스트를 입력받을 때, 중복인 수들이 올 수 있기 때문에 set() 쓰면 된다.

Algorithm/Baekjoon 2021.09.14

[Python] 4873. 반복 문자 지우기

t = int(input()) for idx in range(1, t+1): s = input() answer = [] # 스택 이용할 리스트 for word in s: # word == 지금 answer에 추가할까 말까 고민하는 문자 # answer에 문자가 들어있고, 마지막 문자가 지금 붙이려는 문자와 같다면 중복이므로 pop으로 제거 if answer and answer[-1] == word: answer.pop() # answer가 비어있거나, 중복되지 않는 문자라면 추가 else: answer.append(word) print('#{} {}'.format(idx, len(answer)))