반응형

코딩테스트 126

[파이썬, Python] 백준 1120: 문자열

문제 https://www.acmicpc.net/problem/1120 1120번: 문자열 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 www.acmicpc.net 코드 a, b = input().split() ans = list() for i in range(len(b) - len(a) + 1): cnt = 0 for j in range(len(a)): if a[j] != b[i+j]: cnt += 1 ans.append(cnt) print(min(ans)) 설명 우선 각 입력값을 받아준다. b의 개수에서 a의 ..

[파이썬, Python] 백준 1735: 분수 합

문제 https://www.acmicpc.net/problem/1735 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 코드 import math a, b = map(int, input().split()) c, d = map(int, input().split()) n = math.gcd(a*d + c*b, b*d) print((a*d + c*b)//n, b*d//n) 설명 단순한 방식으로 접근했다. 먼저 통분을 통해서 더해주었다. 이후 분자와 분모의 최대공약수로 나누어주어 해결했다.

[파이썬, 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] 백준 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] 백준 11931: 수 정렬하기 4

문제 https://www.acmicpc.net/problem/11931 11931번: 수 정렬하기 4 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) nums = list() for i in range(n): num = int(input()) nums.append(num) for i in sorted(nums, reverse = True): print(i) 설명 n을 입력받아준다. 숫자를 담을 리스트도 생성해 준다. n의..

[파이썬, Python] 백준 1789: 수들의 합

문제 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 코드 n = int(input()) cnt = 0 res = 0 while True: cnt += 1 res += cnt if res > n: break print(cnt - 1) 설명 문제를 이해하는데 애를 먹었다. 서로 다른 N개의 자연수의 합이 S라고 한다 = 최대한 많은 자연수를 이용해서 만들 수 있어야 한다. 이렇게 이해를 하면 조금 더 쉽지 않을까 싶다. 예를 들어 S가 10이라면 1,2,3,4를 사용해서 만들 수 있다. S가 11이라면 역시 1,2,3,4 만을 이용해서 만들 수 있다. S가 15가..

[파이썬, Python] 백준 1850: 최대공약수

문제 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 코드 import math n, m = map(int, input().split()) print("1" * math.gcd(n, m)) 설명 규칙성을 발견한다면 간단하게 해결이 가능한 문제였다. 이 문제의 규칙은 주어진 두 수의 최대공약수에 해당하는 수만큼 1이 반복되어 나온다는 것. 따라서 math 모듈의 gcd를 사용하여 최대공약수를 구하고, 그 수만큼 1을 출력해 ..

반응형