티스토리 뷰

https://www.acmicpc.net/problem/1010

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

난이도: Silver 5

 

First Try

import math

def fac(x):
    return math.factorial(x)

count = int(input())
for i in range(count):
    n, m = list(map(int, input().split()))
    print(fac(m)/(fac(n)*fac(m-n)))

문제를 찬찬히 읽어보면 순열 문제라는 것을 알 수 있을 것이다. 순열을 구현하기 위해 math 라이브러리의 factorial 함수를 사용했다.

계산 횟수를 첫 번째 입력으로 주기 때문에 count 변수에 저장해둔다.

count만큼 계산을 반복하도록 for 문을 썼다.

n과 m은 문제에서 표현한 n,m과 같은 의미이다.

for문의 마지막에 factorial 함수를 이용해서 순열을 계산했다.

에러가 발생하지 않았지만 채점에서 틀렸다는 것을 확인했다.

 

Second Try 🎉

import math

def fac(x):
    return math.factorial(x)

count = int(input())
for i in range(count):
    n, m = list(map(int, input().split()))
    print(fac(m)//(fac(n)*fac(m-n)))

가장 마지막 줄에 print문만 수정했다.

첫 번째 시도에서 에러가 난 이유는 자연수로 출력하지 않았기 때문이다.

경우의 수를 구하는 문제에 소수가 나왔기 때문에 틀렸던 것이다.


코드를 짜기에 앞서서, 프로그래머스에 익숙해져 있던 터라 백준의 코드 제출방식이 이해가 안 되었다. 기본 문제인 A+B 의 풀이 방식을 구글링하여 감을 잡은 후에 문제를 풀었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함