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

 

24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 


◎ 문제

 

 


◎ 코드

 

1
2
3
4
5
6
7
8
9
10
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt()-2;
        System.out.println((long)n*(n+1)*(n+2)/6);
        System.out.println(3);
    }
}
cs

 


◎ 풀이 및 기록

 

먼저 실행횟수를 구하는 방법을 몰라서 규칙을 찾으려 했다.

이해를 돕기위해 아래와 같은 함수를 만들어 적당한 수를 대입하며 생각해봤다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true) {
            int n = sc.nextInt();
            int cnt=0;
            for (int i = 0; i < n-2; i++) {
                for (int j = i+1; j < n-1; j++) {
                    for (int k = j+1; k < n; k++) {
                        cnt+=1;
                    }
                }
            }
            System.out.println(cnt);
        }
    }
}
cs

 

이 반복문은 i는 n-2까지 j는 n-1까지 k는 n까지 이다.

그리고 i는 0부터 j는 i+1부터 k는 j+1부터 시작하기 때문에 1,2,3 부터 시작해 n-2 n-1 n 까지 반복된다.

즉, n개 중에서 3개를 중복 없이 무작위로 선택한다.

이항계수

으로 풀어주면 된다!