1. ๋ฌธ์ ์ค๋ช
2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ์ ์ง์ด๋ฃ๊ณ , ๊ทธ๊ฒ์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋์ด๋จ๋ ค์, ๋ฌธ์ ์์ ์ํ๋ ๊ตฌ๊ฐ ๋ด์ ์ซ์๋ค์ ๋ฌถ์ด์ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: Brute Force
, 1์ฐจ์ ๋ฐฐ์ด๊ณผ 2์ฐจ์ ๋ฐฐ์ด์ ์์น ๊ด๊ณ
ํด๋น ๋ฌธ์ ๋ n์ maximum์ด 10^7์ด๋ฏ๋ก, O(n)์ ์ด๊ณผํ๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ์ ๋ค ์ง์ด๋ฃ๊ณ , ๊ทธ๊ฒ์ 1์ฐจ์์ผ๋ก ๋ง๋๋, ๋ง์น ๋ฌธ์ ์์ ์ง์ํ๋๋ก๋ ํ์ด๋ฅผ ํ์ง ๋ชปํ๋ค. ๋ํ 1์ฐจ์ ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค๋๋ผ๋, n*n์ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํ๋ ๊ฐ์ ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ 1์ฐจ์ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ๋ ๋ฌด๋ฆฌ๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ ํํ left ~ right ๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ฐ์ ๊ตฌํด ๋ฐํํด์ผ ํ๋ค.
(1) 1์ฐจ์ ๋ฐฐ์ด <-> 2์ฐจ์ ๋ฐฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ณํ
(step 1) 1์ฐจ์์ index๋ฅผ ํตํด, ํด๋น index์ ์์๊ฐ 2์ฐจ์ ๋ฐฐ์ด์ด์๋ค๋ฉด ์์ด์ผํ ์์น๋ฅผ ๊ตฌํ๊ณ ,
(step 2) ๊ทธ ์์น์ ๊ฐ์ ๊ตฌํ๋
2๊ฐ์ง ์ ์ฐจ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
๊ทธ๋ฅผ ์ํด์ ์ผ๋จ ๋ฐฐ์ด์ ๋ชจ์ต์ ๋ณด์.
๋ฌธ์ ์์ 2์ฐจ์์ 1์ฐจ์์ผ๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ ๋จ์ํ๊ฒ, 1์ฐจ์ ๋ฐฐ์ด์ ์ฒ์๋ถํฐ ์ผ๋ ฌ๋ก ๋ฐฐ์ดํ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ (0,0) -> 0, (0,1) -> 1 ... (1,1) -> 4 ... (2,2) -> 8 ์์ ์ ์ ์๋ค. ์ด ๋ ์ฌ์ด๋ฅผ ๋ณํํ๋ ๊ณต์์ ์์ฑํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
(x,y) -> Z // x,y = 2์ฐจ์ ๋ฐฐ์ด์ ํ๋ ฌ ๊ฐ, Z = 1์ฐจ์ ๋ฐฐ์ด์์์ index
x*n + y = Z
๋ฐ๋ผ์ 1์ฐจ์ ๋ฐฐ์ด์ index Z ์
์ฅ์์ ๋ณผ ๋, x๋ n์ผ๋ก ๋๋์์ ๋ ๋ชซ
์ด๊ณ y๋ n์ผ๋ก ๋๋์์ ๋ ๋๋จธ์ง
์์ ์ ์ ์๋ค. ์ด๊ฑธ ์ด์ฉํด์ 1์ฐจ์ ๋ฐฐ์ด์ ๊ฐ index์ ๋ง๋ 2์ฐจ์์์์ ์์น๋ฅผ ์ฐพ์ ์ ์๋ค.
์ด์ step2๋ฅผ ํด๋ณด์. 2์ฐจ์ ๋ฐฐ์ด์ index๋ฅผ ํตํด ๊ฑฐ๊ธฐ์ ํด๋นํ๋ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ค.
๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ณด๋ฉด Math.max(x,y) + 1 == arr[x][y]
์์ ์ ์ ์๋ค. ์ด๋ฅผ ํตํด 2์ฐจ์ ๋ฐฐ์ด ๊ฐ ์์๋ฅผ ๊ตฌํ๋ค.
๋๋จธ์ง๋ ๊ฐ๋จํ๋ค. ์ด ๋ ๊ฐ์ง ์๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ 1์ฐจ์ ๋ฐฐ์ด์์ index == left ๋ถํฐ, == right ๊น์ง์ ๊ฐ๋ค๋ง ๊ตฌํด์ ๋ฐํํ๋ฉด, ๋๋ค.
3. ์ฝ๋ ํ์ด
import java.io.*;
import java.util.*;
class Solution {
/*
n์ maximum์ด 10^7์ด๋ฏ๋ก, O(n)์์ ์ฒ๋ฆฌ ํด์ผ ํ๋ค.
1. 1์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
2. 1์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ค. (n์ผ๋ก ๋๋ ๋ชซ, n์ผ๋ก ๋๋ ๋๋จธ์ง)
3. 2์ฐจ์์ผ๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฐ์ ์ง์ด ๋ฃ๋๋ค.
4. ๋ฐฐ์ด์ ์๋ผ์ ๋ฐํํ๋ค.
*/
public int[] solution(int n, long left, long right) {
int [] ans = new int [(int)(right-left+1)];
int start = 0;
for(long i = left; i <= right; i++){
ans[start++] = Math.max((int)(i/n), (int)(i%n)) + 1;
}
return ans;
}
}
4. ์ฑ์ฅ ํ๊ธฐ
import java.io.*;
import java.util.*;
class Solution {
/*
n์ maximum์ด 10^7์ด๋ฏ๋ก, O(n)์์ ์ฒ๋ฆฌ ํด์ผ ํ๋ค.
1. 1์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
2. 1์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ค. (n์ผ๋ก ๋๋ ๋ชซ, n์ผ๋ก ๋๋ ๋๋จธ์ง)
3. 2์ฐจ์์ผ๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๊ฐ์ ์ง์ด ๋ฃ๋๋ค.
4. ๋ฐฐ์ด์ ์๋ผ์ ๋ฐํํ๋ค.
*/
public int[] solution(int n, long left, long right) {
int [] ans = new int [(int)(right-left+1)];
int start = 0;
for(int i = (int)left; i <= (int)right; i++){
ans[start++] = Math.max((int)(i/n), (int)(i%n)) + 1;
}
return ans;
}
}
๋ด ์ฒซ ํ์ด์ธ๋ฐ, 55์ ๋ง๊ณ ๊ณ์ ํ๋ ธ์๋ค. ์์ด๋์ด์ ๋ฌธ์ ๊ฐ ์๋๊ฐ ์ถ์ด์ ํ์ฐธ ์ฐพ์๋ดค์ง๋ง ๋ฌธ์ ๋ ์ ์ ๋ค๋ฅธ ๊ณณ์ ์์๋ค. ๋ฌธ์ ๋ ๋ฐ๋ก, casting๊ณผ ๊ด๋ จ๋ ๊ฒ์ด์๋ค. n์ ์ต๋ ํฌ๊ธฐ๊ฐ 10^7 ์ด ๋ ์ ์์ผ๋ n*n
์ 2.10 x 10^9
์ธ int ์ต๋ํ ์์ ๋ค ๋ด์ ์ ์๋๋ฐ, ์์ ํ์ด๋ฅผ ๋ณด๋ฉด, for๋ฌธ์ int ํ์ผ๋ก ๋๊ณ ์๋ค. ๋ง์ฝ, left๋ right๊ฐ ์ด๋ฏธ intํ์ ์ต๋์น๋ฅผ ๋์ด์ฐ๋ค๋ฉด, for๋ฌธ์ ๋๋ ๊ณผ์ ์์ ์ด๋ฏธ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋์ ์ค๋ฅ๋ฅผ ์ผ์ผํจ๋ค.
๋ฐ๋ผ์, for๋ฌธ์ left์ right ๊ตฌ๊ฐ์ ๊ฐ๋ค์ด ์ถฉ๋ถํ ํํ๋ ์ ์๊ฒ, long์ผ๋ก ๋๊ณ , ans์ ๋ฃ๋ ๊ฐ๋ค์ n์ผ๋ก ๋๋ ๊ฒ์ด๋, ์ถฉ๋ถํ int์์ ๊ฐ์ผ๋ก ํํ๋ ์ ์์ผ๋ฏ๋ก, ๋ชซ์ด๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ ํ ๊ทธ ๊ฐ์ intํ์ผ๋ก ์บ์คํ
ํด์ฃผ๋ ๊ฒ ํ์ํ๋ค.
casting์ ๋ํด์ ํฌ๊ฒ ์ ๊ฒฝ ์ ์ฐ๊ณ ์์ฃผ ๋์ด๊ฐ๋๋ฐ, ํด๋น ๋ฌธ์ ๋ ํฐ ๊ตํ์ ์ค ๊ฒ ๊ฐ๋ค.