문제 해석
MenOfPassion(A[], n) {
sum <- 0;
for i <- 1 to n - 1
for j <- i + 1 to n
sum <- sum + A[i] × A[j]; # 코드1
return sum;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int count = 0; //수행 횟수를 저장하는 변수
for(int i = 1; i <= n-1; i++){
for(int j = i+1; j <= n; j++){
count++;
}
}
System.out.println(count);
}
}
n = 7
i는 1부터 n-1으로, 즉 1~6만큼 돈다.
j는 i+1부터 n까지 반복문을 도는데, j 반복문은 i 반복문 내부에 있으므로 i가 1번 돌때 j는 i+1 ~ n만큼 도는 것을 알 수 있다.
i = 1 j = 2 ~ 7 [2, 3, 4, 5, 6, 7] => 6번
i = 2 j = 3 ~ 7 [3, 4, 5, 6, 7] => 5번
i = 3 j = 4 ~ 7 [4, 5, 6, 7] => 4번
i = 4 j = 5 ~ 7 [5, 6, 7] => 3번
i = 5 j = 6 ~ 7 [6, 7] => 2번
i = 6 j = 7 [7] => 1번
정리
- 수행 횟수 : n(n-1)/2
- 시간 복잡도(=최고차항) : O((n^2 - n)/2) => 최고차항빼고 다 무시하면 O(n^2) 이다.
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
br.close();
bw.write(n*(n-1)/2 + "\n" + 2);
bw.flush();
bw.close();
}
}
결과
느낀점