당니의 개발자 스토리

1-L 본문

내 풀이(http://boj.kr/0e1bbad28cfe4278ad664446b391d49b) - 맞음

내 풀이(http://boj.kr/68ae5b799c3340dab050fc532e0fb146) - 맞음

 

공유 소스 보기

 

www.acmicpc.net


1-L

오늘은 1-L 1940 주몽 문제를 풀어보도록 하겠습니다.

이 문제는 최대 15,000개인 N개의 재료가 주어져요.

그래서 이 재료 중에서 두 개를 고르는 거죠. 그리고 이 재료는 각각의 고유한 번호를 가지고 있어요. 이 번호는 10만 이하의 번호를 가지고 있죠.

그래서 N개의 재료 중 두 개를 선택해서 이 두개의 번호의 합이 M개인 것을 찾는 거죠. 즉, M이 되는 것이 몇 개인지 counting을 하는 문제인 겁니다.

어떻게 해야될까요?

주어진 재료 중에서 두 개를 고르는 것, 뭐죠? Combination(조합)이죠. 재료를 고를 때 순서가 상관이 없죠. 순서가 상관이 있으면 Permuation, 순서가 상관 없으면 Combination 라고 말씀드렸어요.

순서가 상관없이 재료 두 개를 고르는 거기 때문에, N개 중에서 2개를 고르는 nC2가 된다는 거예요.

그런데 이 if 문은 뭘까요? m이 20만보다 더 크다면 0을 출력하고 그게 아니라면 로직을 짜는 거죠.

고유한 번호는 10만 이하라고 했으니까 두 개의 재료를 선택해서 더한 합이 20만을 초과하지는 않을 거예요.

그래서 사실 if 문은 없어도 되지만 시간초과 때문에 시간 단축을 위해서 적은 것입니다.

이제 else문 안에 있는 로직을 보면, 제가 세 개까지는 중첩 for문을 통해서 Combination을 구현하라고 말씀을 드렸죠.

이렇게 하면 됩니다.

'10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트 > 알고리즘 문제풀이' 카테고리의 다른 글

1-N  (0) 2024.03.16
1-M  (0) 2024.03.14
[맞왜틀팁] 출력 | 1-K 보완설명  (0) 2024.03.14
1-K  (0) 2024.03.14
1-J  (0) 2024.03.13