본문 바로가기

BOJ/Python

(192)
[BOJ/백준] 33046 - Alea Iacta Est (Python) 문제문제링크주사위 눈의 합이 가르키는 사람은 다음과 같이 정의된다. 1: 주사위를 굴린 사람이후 반시계방향으로 수를 세어 나가며 다음 사람을 가리킴마지막 플레이어까지 수를 세어 나갔으면 다시 주사위를 굴린 사람부터 수를 셈두 개의 주사위를 두 번 굴린 결과가 주어졌을 때, 몇 번 플레이어가 진동이 되는가? 풀이주사위를 던졌을 때 던진 사람을 포함해서 그 합만큼 반시계방향으로 세야 하므로먼저 (현재 플레이어 번호-1)+(주사위 수의 합)을 구한다.마지막 플레이어까지 셌으면 1번 플레이어로 돌아가서 다시 세므로 4로 나눈 나머지가 다음에 주사위를 던질 플레이어다.중간 계산 과정에서는 상관없지만 마지막 플레이어를 구할 때 위 방식대로 계산하면 4번 플레이어를 구해야 할 때 0번 플레이어라고 나온다.따라서 마지..
[BOJ/백준] 27222 - Штангист (Python) 문제문제링크운동을 하고 아침보다 저녁의 몸무게가 더 나갈 때 근육량이 증가했다고 본다.n일 동안 증가한 총 근육량을 구하라. 풀이운동을 한 날은 1, 안 한 날은 0으로 입력을 받는다.아침과 저녁의 몸무게를 입력받아 diff에 저녁 기준 증가한 무게를 저장한다.위 문제에서 두 개의 조건을 동시에 만족해야 하므로 운동==1이고 diff>0인 날만 diff를 총 증가 근육량에 더해준다. 코드n=int(input())training=list(map(int, input().split()))muscle_gain=0for i in range(n): morning, evening=map(int, input().split()) diff=evening-morning if (training[i]==1) and (d..
[BOJ/백준] 11034 - 캥거루 세마리2 (Python) 문제문제링크캥거루 세 마리가 수직선 위의 좌표가 주어진다. 바깥쪽의 두 캥거루 중 한 마리가 다른 두 캥거루 사이의 정수 좌표로 점프할 때 캥거루는 최대 몇 번 움직일 수 있는가? 풀이최대 점프를 구하기 위해서는 두 마리의 캥거루 사이 거리가 최대인 것에서 시작해 캥거루 세마리가 모두 이웃하게 끝나면 된다.한 번 점프할 때마다 두 캥거루 사이로 바깥쪽에 있는 캥거루가 뛰어드는데최대 점프로 하기 위해서는 두 캥거루 중 하나와 바로 이웃하게 오면 된다.이 과정을 반복해서 모두 이웃하게 될 때 점프 수는 처음 최대 거리에서 1을 뺀 값과 같다. 코드while True: try: a,b,c=map(int, input().split()) max_length=max(b-a, c-b) print(m..
[BOJ/백준] 17912 - License to Launch (Python) 문제문제링크Birk는 n일 중 우주쓰레기가 가장 적게 발생하는 날 로켓을 발사할 것이다.n일의 우주쓰레기 양이 주어질 때, 로켓을 발사하기까지 며칠을 기다려야 하는가? 풀이리스트 형태로 우주쓰레기 양을 입력받고 min()으로 최소 우주쓰레기 양을 구한다.이 값의 인덱스를 구하면 원하는 값이 된다.파이썬에서 인덱스는 0부터 시작하므로 현재 값의 인덱스는 그 전날까지가 며칠인가와 같다. 코드n=int(input())spacejunks=list(map(int, input().split()))min_spacejunk=min(spacejunks)print(spacejunks.index(min_spacejunk))
[BOJ/백준] 6159 - Costume Party (Python) 문제문제링크N마리의 소가 있을 때, 그 중 두 소의 길이의 합이 S보다 작거나 같을 때의 pair 수를 구하라. 풀이리스트에 입력받은 소의 길이를 정렬한다.양 끝에서 두 소를 선택하고 무게 합이 S 이하이면 left에 해당하는 소에 대해 right 소까지 모든 쌍이 조건을 만족하므로right-left 만큼 더하고 left를 1 증가시켜 다음 left 소에 대한 쌍을 확인한다.만약 S보다 크다면 right를 1 감소시켜 위 과정을 left 코드N, S=map(int, input().split())cows=[int(input()) for _ in range(N)]cows.sort()fit=0left, right=0, N-1while left
[BOJ/백준] 3711 - 학번 (Python) 문제문제링크 각 테스트케이스에서 학번 g개가 주어진다.이 학번들을 m으로 나눈 나머지가 모두 다른 가장 작은 정수 m을 출력하라. 풀이각 테스트케이스에서 리스트에 g개의 학번을 입력받는다.m을 1부터 시작하여 리스트 내의 각 학번을 나눈 나머지를 reminders 리스트에 저장한다.이 리스트를 set으로 중복된 값을 삭제한 후 이 리스트의 길이와 학번 리스트의 길이를 비교해 같다면 m을 출력하고 break한다.다르다면 m을 증가시킨다. while문으로 감싸져 있으므로 다시 나머지 계산부터 반복된다. 코드t=int(input())for _ in range(t): g=int(input()) student_ids=[int(input()) for _ in range(g)] m=1 while True: ..
[BOJ/백준] 2635 - 수 이어가기 (2635 ) 문제문제링크입력으로 첫번째 수가 주어질 때 아래 규칙으로 만들어지는 최대 개수의 수들을 구하라.첫 번째 수로 양의 정수가 주어진다.두 번째 수는 양의 정수 중에서 하나를 선택한다.세 번째부터 이후에 나오는 모든 수는 앞의 앞의 수에서 앞의 수를 빼서 만든다.음의 정수가 만들어지면, 이 음의 정수를 버리고 더 이상 수를 만들지 않는다. 풀이후보리스트에는 입력 수와 1부터 n까지의 수 중 랜덤으로 넣는다. 모든 수를 다 고려해야 하므로 for문으로 모든 케이스를 다 살필 것이다.후보 리스트에 while문으로 위 규칙을 따라 수를 생성해 저장한다.만약 final 리스트보다 후보리스트의 길이가 더 길다면 final 리스트를 이번 시도의 후보리스트로 교체한다.두번째 수가 n인 시도까지 모두 끝났다면 이제 fina..
[BOJ/백준] 2508 - 사탕 박사 고창영 (Python) 문제문제링크테스트케이스 t번만큼 각각 r행 c열의 사탕 박스가 주어진다. 사탕은 모습은 딱 두가지이다.각 박스에서의 사탕 개수를 구하라. 풀이각 행은 하나의 문자열로 처리하여 리스트에 저장한다. 1번 사탕 모습을 할 때, 단순히 한 줄 내에 '>o2번 사탕 모습을 할 때도 위와 같이 인덱스 조건을 처리해준다.이 경우에는 각 요소가 다른 문자열에 속하므로 1번 사탕과 달리 문자열 비교를 진행할 수 없다. 따라서 각 요소를 비교해준다. 코드t=int(input())for _ in range(t): input() r,c=map(int, input().split()) candy=[] for i in range(r): candy.append(input()) cnt=0 for i in range(r..