반응형

개발 연습장/백준 문제풀이 221

[파이썬, Python] 백준 11652: 카드

문제 https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) card = dict() for i in range(n): a = int(input()) if a not in card: card[a] = 0 card[a] += 1 print(max(sorted(card), key = card.get)) 설명 n을 입력받고, card의 딕셔너리를 이..

[파이썬, Python] 백준 1057: 토너먼트

문제 https://www.acmicpc.net/problem/1057 1057번: 토너먼트 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 www.acmicpc.net 코드 n, a, b = map(int, input().split()) cnt = 0 while True: cnt += 1 if (a+1) // 2 == (b+1) // 2: print(cnt) break else: a = (a+1) // 2 b = (b+1) // 2 n, a, b = map(int, input().split()) cnt = 0 while a != b: cnt += 1 a -= a ..

[파이썬, Python] 백준 1748: 수 이어 쓰기 1

문제 https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 코드 n = int(input()) len_n = len(str(n)) cnt = 0 for i in range(len_n - 1): cnt += 9 * 10 ** i * (i+1) print(cnt + (n - 10 ** (len_n - 1) + 1) * len_n) 설명 단순하게 수를 구해서 푸는 문제라기엔 주어진 범위가 넓어서 규칙성을 찾아야 했다. 혼자서는 찾지 못해서 검색을 통해 해결했다. n의 규칙은 이렇다. 자릿수 1개의 경우: 숫자는 1~9까지 존재, 모두 더하면 자리수가 9개 자릿수 2개의 경우:..

[파이썬, Python] 백준 9613: GCD 합

문제 https://www.acmicpc.net/problem/9613 9613번: GCD 합 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진 www.acmicpc.net 코드 import math,sys input = sys.stdin.readline t = int(input()) for i in range(t): a = list(map(int, input().split())) n = a[0] nums = a[1:] cnt = 0 for i in range(n-1): for j in range(i+1, n): cnt += math.gc..

[파이썬, Python] 백준 2960: 에라토스테네스의 체

문제 https://www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 코드 n, k = map(int, input().split()) num = list(i for i in range(2, n+1)) del_num = list() while len(del_num) < k: tar = num[0] for i in num: if i % tar == 0: del_num.append(i) num.remove(i) print(del_num[k-1]) 설명 우선 입력값을 받아주고 범위에 맞는 수 리스트를 생성해 주었다. 그리고 지워진 수의 값을 담아줄 리스트..

[파이썬, Python] 백준 10610: 30

문제 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 코드 nums = list(input()) nums.sort(reverse = True) cnt = 0 for i in nums: cnt += int(i) if cnt % 3 != 0 or "0" not in nums: print(-1) else: print(''.join(nums)) 설명 우선 각 수를 리스트로 받아서 저장해 두고 큰 수를 만들기 위해서 역순으로 정렬을 해주자. 30의 배수가..

[파이썬, Python] 백준 3036: 링

문제 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 코드 from math import gcd n = int(input()) rings = list(map(int, input().split())) for i in range(1, n): x = gcd(rings[0], rings[i]) print(f'{rings[0] // x}/{rings[i] // x}') 설명 두 수의 최대공약수를 알아내서 최대공약수로 나눈 수를 형식에 맞게 출력하면 되는 문제였다. math에 있는 gcd..

[파이썬, Python] 백준 1094: 막대기

문제 https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 코드 x = int(input()) sticks = [64] while True: if sum(sticks) > x: stick = min(sticks) // 2 sticks.remove(min(sticks)) if stick + sum(sticks) >= x: sticks.append(stick) else: sticks.append(stick) sticks.append(stick) el..

[파이썬, Python] 백준 1476: 날짜 계산

문제 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 코드 e, s, m = map(int, input().split()) year = 1 while True: if ((year - e) % 15 == 0) and ((year - s) % 28 == 0) and ((year - m) % 19 == 0): break year += 1 print(year) 설명 간단하게 생각하면 금방 풀 수 있는 문제다. 1년부터 시작해서 연도를 1씩 늘리는데 년도에서..

[파이썬, Python] 백준 2491: 수열

문제 https://www.acmicpc.net/problem/2491 2491번: 수열 0에서부터 9까지의 숫자로 이루어진 N개의 숫자가 나열된 수열이 있다. 그 수열 안에서 연속해서 커지거나(같은 것 포함), 혹은 연속해서 작아지는(같은 것 포함) 수열 중 가장 길이가 긴 것을 찾 www.acmicpc.net 코드 n = int(input()) num = list(map(int, input().split())) dp1 = [1 for i in range(n)] dp2 = [1 for i in range(n)] for i in range(1, n): if num[i] = num[i-1]: dp2[i] = max(dp2[i], dp2[i-1] + 1) print(max(max(dp1), max(dp2))..

반응형