๐๋ฌธ์
Softeer - ํ๋์๋์ฐจ๊ทธ๋ฃน SW์ธ์ฌํ๋ณดํ๋ซํผ
โจํต์ฌ ๋ด์ฉ
nums[i] < nums[j] and nums[i] > nums[k] ๋ฅผ ๋ง์กฑํ๋ ๋ฐฐ์ด์ ์ฐพ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ
์ ์ฝ ์กฐ๊ฑด: 3 <= N <= 5000 ์ธ ์ ์
๐คํด๊ฒฐ ์์ด๋์ด
1. 3์ค for ๋ฌธ ์ฌ์ฉ (์๊ฐ ์ด๊ณผ)
๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ง๋ค๊ณ , if ๋ฌธ์ผ๋ก ๋ฌธ์ ์กฐ๊ฑด์ ํ๋จ -> O(n^3) ์๊ฐ ๋ณต์ก๋๋ก ์๊ฐ ์ด๊ณผ!
2. ๋ฐฑํธ๋ ํน (์๊ฐ ์ด๊ณผ)
๋ฐฐ์ด์ ์กฐํฉ์ ๋ฐฑํธ๋ํน์ ํ์ฉํ์ฌ ๋ง๋ค๊ณ ์กฐ๊ฑด ํ๋จ -> O(n^3) ์๊ฐ ๋ณต์ก๋๋ก ์๊ฐ ์ด๊ณผ!
3. ๋์ ํฉ (์ ๋ต)
์ ์ฝ ์กฐ๊ฑด์ด 3 <= N <= 5000์ผ๋ก ๊ฑธ๋ ค ์๊ธฐ์ O(n^2) ์ดํ ํ์ด ๋ฒ์ ์๊ฐํด์ผ ํ๋ค.
i์ k์ ์กฐํฉ์ ๊ธฐ์ค์ผ๋ก nums[i]์ nums[k] ์ฌ์ด์ nums[i] ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
1. nums[i] < nums[k] ๋ผ๋ฉด
nums[k] < nums[i] < nums[j] ๋ผ๋ ์กฐ๊ฑด์๋ ๋ง์ง ์์ผ๋
i ์ดํ์ ๋ฑ์ฅํ๋ nums[i] ๋ณด๋ค ํฐ ์์ ํด๋นํ๋ค. (bigger += 1)
2. nums[i] > nums[k] ๋ผ๋ฉด
๋ฌธ์ ์ ์กฐ๊ฑด์ ์ผ๋ถ์ ํด๋นํ๋ค.
๊ทธ๋ฌ๋ i ์ k ์ฌ์ด์ ๋ฑ์ฅํ nums[i] ๋ณด๋ค ํฐ ์ (bigger)๋ฅผ ๋ํด ๊ฐ(ans)์ ๊ฐฑ์ ํ๋ ๊ณผ์ ์ ํตํด ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑ์ํฌ ์ ์๋ค.
โ ์ ๋ต ์ฝ๋ (python)
import sys
n = int(input())
nums = list(map(int, input().split()))
ans = 0
for i in range(n):
bigger = 0
for k in range(i + 1, n):
if nums[i] < nums[k]: # ์กฐ๊ฑด์ ์๋ง์, a[i] ๋ณด๋ค ํฐ ์๋ผ๋ ๊ฒ๋ง ์ฒดํฌ
bigger += 1
else: # ์กฐ๊ฑด์ ๋ง์ - ๊ธฐ์กด์ ์ธ์๋ a[i] ๋ณด๋ค ํฐ ๊ฐ๋ค ๋ํด์ฃผ๊ธฐ
ans += bigger
print(ans)
โ ์ ๋ต ์ฝ๋ (java)
import java.io.*;
import java.util.*;
public class Main {
static int n;
static int[] nums;
static int bigger;
static long ans; // ์๋ฃํ ์ฃผ์!
public static void main(String[] args) throws IOException{
// input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
nums = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++){
nums[i] = Integer.parseInt(st.nextToken());
}
// ๋์ ํฉ
for(int i = 0 ; i < n; i++) {
bigger = 0;
for (int k = i + 1; k < n; k++) {
if (nums[i] < nums[k]) // ์กฐ๊ฑด์ ์๋ง์, a[i] ๋ณด๋ค ํฐ ์๋ผ๋ ๊ฒ๋ง ์ฒดํฌ
bigger += 1;
else // ์กฐ๊ฑด์ ๋ง์ - ๊ธฐ์กด์ ์ธ์๋ a[i] ๋ณด๋ค ํฐ ๊ฐ๋ค ๋ํด์ฃผ๊ธฐ
ans += bigger;
}
}
// output
System.out.println(ans);
}
}