728x90


파이썬


브1 달팽이는 올라가고 싶다


오답 코드


1
2
3
4
5
6
7
8
9
10
A, B, V = map(int, input().split())
result = 0
cnt = 0
while(True):
    result += A
    cnt += 1
    if result >= V:
        break
    result -= B
print(cnt)
cs


처음에 더했다 빼면서 V미터에 도달할 때까지 무한루프를 돌리는 코드를 짰는데 시간초과가 떴다.


맞은 코드


1
2
3
4
5
6
7
8
9
10
11
A, B, V = map(int, input().split())
result = 0
cnt = 0
if A >= V:
    cnt = 1
else:
    if (V - A) % (A - B) != 0:
        cnt = (V - A) // (A - B) + 2
    else:
        cnt = (V - A) // (A - B) + 1
print(cnt)
cs


루프 대신에 나누기를 이용해서 소요 기간을 계산해주는 연산을 만들었다.

A가 V 이상이면 하루이므로 1을 출력하고 아닐 경우, V에서 올라가기만 하는 마지막날을 제외하고 올라가는 거리와 미끄러지는 거리의 차를 나눠준 후에 제외한 마지막날을 합해주기 위해 1을 더해준다.

여기서 나눠줬을 때 나머지가 생기는 경우 하루가 더 필요하기에 2를 더해준다.


브1 이항 계수1


맞은 코드


1
2
3
4
5
6
7
8
9
10
N, K = map(int, input().split())
result = 1
if not (K==0 and K==N):
    temp = 1
    for i in range(N, N-K, -1):
        result *= i
    for i in range(K, 1-1):
        temp *= i
    result //= temp
print(result)
cs


이 문제는 이항 계수 즉 수학적 개념과 공식을 알고 있어야 풀 수 있다.

예제에서 N이 5, K가 2일 때 답이 10이다.

여기서 5C2=10이므로 NCK임을 알 수 있다.

K가 0 혹은 N일 때를 제외하고 NPK/P!이므로 이를 for문을 이용하여 풀었다.


728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기