본문 바로가기

전체 글

(300)
[Codeforces] 581A - Vasya the Hipster (Python) 문제문제링크빨간 양말 a개, 파란 양말 b개가 있다.서로 다른 색 양말을 신을 수 있는 최대 일수와 그 이후 같은 색 양말만 신을 수 있는 일수를 구하라. 풀이서로 다른 색 양말을 신을 수 있는 최대 일수는 둘 중 한 종류가 다 떨어질 때까지 신는 것과 같다.따라서 두 종류의 개수 중 min을 구하면 된다.남은 양말은 a와 b의 max값에서 이미 신은 양말 수를 뺀 것과 같다.이제 남은 양말은 2개씩 신으므로 2로 나눈 몫을 구하면 된다. 코드import sysinput = sys.stdin.readlinea, b = map(int, input().split())diff_pair = min(a, b)same_pair = (max(a, b) - diff_pair)//2print(diff_pair, same..
[Codeforces] 1676A - Lucky? (Python) 문제문제링크티켓 번호의 맨 앞 자리 3자리의 합과 맨 뒷자리 3자리의 합이 같으면 YES를 출력하라. 풀이티켓 번호를 입력받아 map(int, 문자열)로 감싸면 각 자리를 int형으로 바꾸게 된다.이 map 함수를 list로 저장하고 sum함수를 사용해 맨 앞 3개의 합과 맨 뒤 3개의 합이 같은지 판단한다. 코드import sysinput = sys.stdin.readlinet = int(input())for _ in range(t): nums = list(map(int, input().strip())) if sum(nums[:3]) == sum(nums[-3:]): print('YES') else: print('NO')
[BOJ/백준] 3135 - 라디오 (Python) 문제문제링크버튼 1, 2로는 주파수를 1MHz 증가 혹은 감소시킬 수 있다.나머지 n개의 버튼은 지정된 주파수로 이동하는 즐겨찾기 버튼이다.주파수 A에서 B로 이동하기 위해 눌러야 하는 가장 적은 버튼 수를 구하라. 풀이가장 기본은 1MHz씩 증가만, 혹은 감소만 시켜서 이동하는 것이다.다른 방법은 즐겨찾기 버튼을 눌러 그 주파수에서 B로 이동하는 방법이다.for문으로 모든 즐겨찾기 버튼을 한 번씩 눌러보면 된다.즐겨찾기 버튼 1번과 그 주파수에서 증가만 혹은 감소만 시켜 이동하면 abs(x-b)을 더한 값이 후보가 된다.이때 즐겨찾기 버튼을 여러번 눌러도 b로 즉시 이동하는 것이 아닌 이상 누른 버튼 수만 늘어난다.즐겨찾기 버튼에 b가 있을지라도 어차피 for문으로 모든 즐겨찾기 버튼을 눌려보기 때문에..
[BOJ/백준] 2828 - 사과 담기 게임 (Python) 문제 문제링크바구니는 m칸을 차지하고 모든 사과가 바구니 안에 들어가도록 움직여야 한다.이때 바구니의 최소 이동 거리를 구하라. 풀이바구니를 최소 이동하라면 바구니 범위 안에 사과 좌표가 있으면 그대로 있고 범위를 벗어날 때만 바구니를 움직여야 한다.만약 바구니보다 사과가 왼쪽에 위치하면 바구니의 최소좌표를 사과 좌표와 동일하게 설정하고 이 이동거리를 총 이동거리에 더한다.만약 바구니보다 사과가 오른쪽에 위치하면 바구니의 최대좌표를 사과 좌표와 동일하게 설정하고 이 이동거리를 총 이동거리에 더한다.이동한 경우 나머지 바구니의 끝 좌표를 이동한 좌표부터까지와 m이 되게 설정해야 한다. 코드 import sysinput = sys.stdin.readlinen, m = map(int, input().split..
[BOJ/백준] 1817 - 짐 챙기는 숌 (Python) 문제문제링크책을 박스에 넣어 택배로 보내려고 할 때 최소 박스 개수를 구하라.책의 순서는 변경할 수 없고 각각 무게가 있으며 박스는 최대 넣을 수 있는 무게가 있다. 풀이책이 없는 경우 둘째 줄에 책 무게들은 입력되지 않으므로 책의 무게들을 입력받기 전에 if문으로 처리해 0을 출력하고 코드를 종료한다.이 문제에서 가장 핵심은 책의 순서가 바뀌지 않는다는 것이다.현재 박스에 넣은 책의 무게를 weight로 설정하고 현재 책이 이미 들어간 책에 더했을 때 박스의 최대 허용 무게(m)보다 작거나 같으면 넣을 수 있는 것이므로 weight에 현재 책 무게를 더해준다.만약 m을 넘으면 더 이상 책을 넣을 수 없는 것이므로 현재 박스를 마무리하고 box에 1을 더해준다.다음 박스에 현재 책을 넣어야 하므로 wei..
[Codeforces] 1154A - Restoring Three Numbers (Python) 문제문제링크a+b, a+c, b+c, a+b+c가 순서 없이 주어진다.a, b, c를 구해 출력하라. (순서는 상관없다.) 풀이a, b, c는 모두 양수인 정수이므로 주어진 네 정수 중 a+b+c가 제일 크다.따라서 max()로 이 값을 구하고 이 값에서 각각을 빼면 0, a, b, c가 나온다.0은 필요없으므로 for문 내에서 if문을 사용해 max값과 현재 값이 다를 때만 결과를 리스트 abc에 저장한다. 코드import sysinput = sys.stdin.readlineX = list(map(int, input().split()))Sum = max(X)abc = [Sum-x for x in X if Sum!=x]print(*abc)
[Codeforces] 1669A - Division? (Python) 문제문제링크rating이 1900 이상이면 Division1, 1600~1899이면 Division2, 1400~1599이면 Division3, 나머지는 Division4이다.rating이 주어질 때 각각의 어느 Division에 해당하는지 출력하라. 풀이if-elif-else문을 통해 rating을 판단해 division을 결정한다.출력 결과는 'Division _'로 고정되어 있으므로 f-string을 사용해 출력한다. 코드import sysinput = sys.stdin.readlinet = int(input())for _ in range(t): rating = int(input()) if rating >= 1900: d = 1 elif rating >= 1600..
[Codeforces] 1899A - Game with Integers (Python) 문제문제링크각 차례마다 n에 -1하거나 +1을 할 수 있다.첫번째 플레이어가 10번 안에 수를 움직여서 3으로 나누어떨어지게 만들면 승리한다.첫번째 플레이어와 두번째 플레이어 중 누가 승리하는가. 풀이n이 주어질 때 3k, 3k+1, 3k+2가 가능하다. (k는 정수)첫 번째 플레이어는 두번째 경우에는 -1, 세번째 경우에는 +1 하면 첫 시도에 바로 3의 배수를 만들 수 있다.하지만 첫번째 경우에 -1하면 두번째 플레이어는 +1하고 +1을 하면 두번째 플레이어가 -1하면서 두번째 플레이어 차례에 3의 배수가 된다.따라서 n이 3의 배수일 때는 Second, 나머지 경우에는 First를 출력하면 된다. 코드import sysinput = sys.stdin.readlinet = int(input())for..