코딩테스트/백준

[COSE403] 3주차 연습 풀이와 설명 모음

starcat37 2023. 7. 17. 16:23

1094. [S5] 막대기

# 1094

X = int(input())
sticks = [64, ]

while True:
    if sum(sticks) == X:
        break
    else:
        shortest = min(sticks)
        sticks.remove(shortest)
        half = shortest // 2
        sticks.append(half)
        sticks.append(half)
        if sum(sticks) - half >= X:
            sticks.remove(half)

print(len(sticks))

문제 설명이 좀 이해가 안 돼서 여러 번 읽어본 문제다. 다만 이해만 되면 그대로 옮기기만 하면 된다. 문제를 잘 읽자!

 

1769. [S5] 3의 배수

# 1769

X = int(input())
cnt = 0

def switch_question(X):
    return sum(map(int, list(str(X))))

while X >= 10:
    X = switch_question(X)
    cnt += 1

print(cnt)
print("NO" if X % 3 else "YES")

python3로 제출하니 시간 초과, pypy로 제출하니 통과했다... 파이썬은 생각보다 많이 느리다는 사실을 깨달았다.

 

9372. [S4] 상근이의 여행

 

 

15654. [S3] N과 M (5)

 

 

15657. [S3] N과 M (8)

 

 

11051. [S2] 이항 계수 2

# 11051

import sys
sys.setrecursionlimit(10**6)

def factorial(N):
    if N > 1:
        return N * factorial(N-1)
    else:
        return 1

N, K = map(int, input().split(" "))

print(factorial(N)//(factorial(K)*factorial(N-K)) % 10007)

이항 계수 공식을 그대로 옮기는 식으로 작성했다가 RecursionError가 나왔고... 아래 링크대로 recursion limit를 늘려주었다

 

런타임 에러 (RecursionError)

RecursionErrorRecursionError는 재귀와 관련된 에러입니다. 가장 많이 발생하는 이유는 Python이 정한 최대 재귀 깊이보다 재귀의 깊이가 더 깊어질 때입니다.Python이 정한 최대 재귀 깊이는 sys.getrecursionli

help.acmicpc.net

그런데 다시 틀렸습니다가 떠서 왜지 했는데 질문 게시판을 보던 중 파이썬의 실수형 float의 정확도 때문에 오류가 날 수 있겠다는 생각이 들었고... 그냥 나눗셈이 아닌 몫을 구하도록 //로 나눴더니 바로 정답이었다. 이유를 정확히 모르겠다.

1699. [S2] 제곱수의 합

 

 

25391. [G5] 특별상

 

이번 주는 다른 일들이 많아 잘 풀지는 못했다...ㅠㅠ 다음 주에는 다시 열심히 풀어야겠다.