728x90
반응형
SMALL
Programmers 레벨 0_코딩테스트 입문 문제 풀이
https://school.programmers.co.kr/learn/challenges/beginner?
코딩테스트 입문 | 프로그래머스 스쿨
코딩테스트에 처음 도전하는 사람들을 위한 입문 문제 모음. 쉬운 문제부터 하나씩 도전해 보면서 코딩테스트에 자신감도 붙이고 문제 해결 능력을 키워보세요!
school.programmers.co.kr
풀이 날짜 : 2023-09-26
문제 수 : 13
소요 시간 : 4hour 30min
1. 분수의 덧셈 (86')
def solution(numer1, denom1, numer2, denom2):
n = numer1*denom2 + numer2*denom1
d = denom1*denom2
de1 = [d for d in range(denom1, (denom1*denom2)+1, denom1)]
de2 = [d for d in range(denom2, (denom1*denom2)+1, denom2)]
m = [i for i in de1 if i in de2]
nu1 = numer1 * (de1.index(min(m)) + 1)
nu2 = numer2 * (de2.index(min(m)) + 1)
numer, denom = nu1+nu2, min(m)
# 기약분수
a = [i for i in range(2, numer+1) if numer % i == 0]
b = [i for i in range(2, denom+1) if denom % i == 0]
n = [i for i in a if i in b]
if n == [] :
return [numer, denom]
else :
return [numer//max(n), denom//max(n)]
사실 이 문제는 파이썬의 내장 모듈을 이용하면 편하다.
import math
def solution(numer1, denom1, numer2, denom2):
numer = numer1 * denom2 + numer2 * denom1
denom = denom1 * denom2
gcd = math.gcd(numer, denom)
return [numer//gcd, denom//gcd]
from fractions import Fraction
def solution(numer1, denom1, numer2, denom2):
answer = Fraction(numer1, denom1) + Fraction(numer2, denom2)
return [answer.numerator, answer.denominator]
2. 최빈값 구하기 (28')
from collections import Counter
def solution(array):
answer = [n for n, x in Counter(array).items() if x == max(Counter(array).values())]
return -1 if len(answer) > 1 else max(answer)
3. 약수 구하기 (1')
def solution(n):
return [i for i in range(1, n+1) if n%i == 0]
4. 합성수 찾기 (10')
def solution(n):
count = 0
answer = []
for num in range(1, n+1) :
a = [i for i in range(1, num+1) if num%i == 0]
if len(a) > 2 :
count += 1
return count
5. 팩토리얼 (6')
def solution(n):
i, num = 1, 1
while(True) :
num *= i
if num == n :
return i
elif num > n :
return i-1
i += 1
def solution(n):
base = 1
m = 1
while base <= n:
m += 1
base *= m
return m-1
6. k의 개수 (6')
def solution(i, j, k):
answer = "".join(str(x) for x in list(range(i, j+1)))
return sum([1 for a in answer if int(a) == k])
def solution(i, j, k):
answer = sum([ str(i).count(str(k)) for i in range(i,j+1)])
return answer
def solution(i, j, k):
return sum(map(lambda v: str(v).count(str(k)), range(i, j+1)))
6-2. 7의 개수 (2')
def solution(array):
return sum(map(lambda x : x.count('7'), "".join(map(str, array))))
def solution(array):
return str(array).count('7')
7. 가까운 수 찾기 (18')
def solution(array, n):
m = [abs(n-a) for a in sorted(array)]
return sorted(array)[m.index(min(m))]
solution=lambda a,n:sorted(a,key=lambda x:(abs(x-n),x))[0]
def solution(array, n):
array.sort(key = lambda x : (abs(x-n), x-n))
answer = array[0]
return answer
8. 소인수분해 (8')
def solution(n):
num = [i for i in range(2, n+1) if n%i == 0]
c = [i for i in range(2, n+1) if not all(i % j for j in range(2, i))]
return sorted(list(set(num) - set(c)))
n의 약수와 합성수를 각각 num, c에 리스트로 넣고, 차집합을 했다. set는 순서가 섞일 수 있으므로 최종적으로 sorted로 정렬을 해주었다.
9. 이진수 더하기 (3')
def solution(bin1, bin2):
return bin(int(bin1, 2) + int(bin2, 2))[2:]
int(x, base) = base진법으로 적힌 숫자 x(type:str)를 10진법으로 변환한다.
bin(x) = 10진법으로 적힌 숫자 x를 2진법으로 변환한다. 단, 앞에 0b가 붙으므로 2번 인덱스부터 출력했다.
10. 연속된 수의 합 (9')
def solution(num, total):
if num%2 != 0 :
return [i for i in range(total//num-(num//2), total//num+(num//2)+1)]
else :
return [i for i in range(total//num-(num//2)+1, total//num+(num//2)+1)]
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
11. 다음에 올 숫자 (18')
def solution(common):
if common[1] - common[0] == common[-1] - common[-2] :
return common[-1] + (common[-1] - common[-2])
else :
return common[-1] * (common[-1] // common[-2])
12. 다항식 더하기 (63')
def solution(polynomial) :
a = polynomial.split(' + ')
x = [i for i in a if 'x' in i] # x항 모음
y = [i for i in a if 'x' not in i] # 상수항 모음
# x항 계산, 상수항 계산
x2 = sum(map(int, [i.replace('x', '') if i != 'x' else 1 for i in x]))
y2 = sum(map(int, y))
# 계수 1 생략
if x2 == 1 : x2 = ''
if x == [] :
return str(y2)
elif y == [] :
return f"{x2}x"
else :
return f"{x2}x + {y2}"
728x90
반응형
LIST
'Coding Study > Programmers (Python)' 카테고리의 다른 글
[프로그래머스/파이썬] Lv.0 진료순서 정하기 (6') (0) | 2023.09.26 |
---|---|
[프로그래머스/파이썬] Lv.0 2차원으로 만들기 (8') (0) | 2023.09.26 |
[프로그래머스/파이썬] Lv.0 코딩테스트 입문 (난이도 하) (0) | 2023.09.22 |
[프로그래머스/파이썬] Lv.0 이차원 배열 대각선 순회하기 (11') (0) | 2023.09.21 |
[프로그래머스/파이썬] Lv.0 정사각형으로 만들기 (16') (0) | 2023.09.21 |