ํ๋ฆฐ ์ฝ๋(์๊ฐ ์ด๊ณผ)
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
for(int tc=1; tc<=t; tc++) {
int n = scan.nextInt();
int leftSeq = 2;
int rightSeq = 2;
int leftNum = 1;
int rightNum = 1;
if(n == 1) {
System.out.println("#" + tc + " 1 1");
continue;
}
// N์ธต์ ์ ์ผ ์ผ์ชฝ
for(int i=0; i<n-1; i++) {
leftNum += leftSeq;
leftSeq += 4;
}
// N์ธต์ ์ ์ผ ์ค๋ฅธ์ชฝ
for(int i=0; i<n; i++) {
rightNum += rightSeq;
rightSeq += 4;
}
System.out.println("#" + tc + " " + leftNum + " " + (rightNum-2));
}
scan.close();
}
}
์ผ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ฐ์ฅ ๋จผ์ ๊ท์น์ ์ฐพ์์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ทธ๋์ ๊ท์น์ ์ฐพ์๋ณด์๋ค.
๊ฐ ์ธต๋ณ๋ก ์ ค ์ผ์ชฝ๊ฐ์ ๋ณด์.
1 3 9 19 33 51 ...
์ฝ๊ฐ ์ํ์ ์ธ ๋ฌธ์ ๋ก ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ด ๋ํด์ง๋ค.
๊ฐ ํญ๋ง๋ค 2, 6, 10, 14, 18, ... 4์ฉ ์ปค์ง๋ฉด์ ๋ํด์ง๋ค. (๊ณ์ฐจ ์์ด)
์ผ์ชฝ๊ฐ์ ์์ ๊ฐ์ด ๊ตฌํ ์ ์๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๊ฐ์ ๊ทธ ๋ค์์ธต์ ์ ค ์ผ์ชฝ๊ฐ์์ -2๋ฅผ ํ๋ฉด ๋๋ค.
1 7 17 31 49 71 ...
์ ์ซ์๋ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณ์ฐจ์์ด๋ก 4์ฉ ์ปค์ง์ง๋ง, ๊ทธ๋ฅ ๋ค์์ธต์ ์ ค ์ผ์ชฝ๊ฐ์ ๊ตฌํ ๋ค -2๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
๋ฐ๋ผ์ ์ ค ์ผ์ชฝ๊ฐ์ ์ฒ์์ 2๋ฅผ ๊ธฐ์ค์ผ๋ก, ์ ๋ ฅ๋ฐ์ ์ธต(n)์ -1๋งํผ 4์ฉ ๋ํ๋ ๊ท์น์ ํตํด ์ฐพ์ผ๋ฉด ๋๊ณ ,
์ ค ์ค๋ฅธ์ชฝ๊ฐ์ ์์๋ ๋์ผํ๊ฒ ์ ๋ ฅ๋ฐ์ ์ธต(n) ๊น์ง 4์ฉ ๋ํ๋ ๊ท์น์ผ๋ก ์ฐพ๊ณ -2๋ฅผ ํ๋ฉด ๋๋ค.
ํ์ง๋ง ์ ์ถํด๋ณด๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค... ์?
๋ฌธ์ ์์ ์์ธํ๋ณด๋ฉด n์ ๋ฒ์๋ 10^9์น ์ด๋ค.... ์ด ๊ฐ์ 10์ต์ผ๋ก ๋น์ฐํ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ์ ๋ฐ์ ์๋ค...
(๋ณดํต ์๊ฐ์ ๊ณ์ฐํ ๋, 1์ต์ ๋ฒ์๊ฐ 1์ด๋ผ๊ณ ํ๋จํ๋ฉด ๋๋ค... ์ฆ 10์ต์ด๋ฉด ๋๋ต 10์ด์ ๋ ๊ฑธ๋ฆฐ๋ค.)
๋ฐ๋ผ์ for๋ฌธ ์์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค!!!
๊ทธ๋ผ ๋ค๋ฅธ ๊ท์น์ ์ฐพ์์ผ ํ๋ค.... ๋ญ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง ์ํ์ ์ธ... ํ์์๋ ๊ท์น์ฐพ๋๊ฑธ ์ข์ํ๋ ํฐ๋ผ ์ด๋ ต์ง๋ ์์๋ค.
๊ฐ ํญ๋ค์๋ํด -1, +1 ๋ฑ์ ํด๋ณด๊ณ ๊ท์น์ ๋ผ์๋ง์ถ๋ฉด์ ์ฐพ์๋ค.
์ ค ์ผ์ชฝ์ธต์ ๊ท์น์ (n-1) * (n-1) * 2 + 1 ์ด๋ค... (์ ๋์ ํด๋ณด๋ฉด ๋ต์ด ๋์จ๋ค...^^;;)
์ ค ์ค๋ฅธ์ชฝ์ ๊ท์น์ (n*n*2) - 1 ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ๋ณต์ก๋๋ O(1)์ด ๋๊ณ , ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์ง ์๋๋ค!
๋ฐ๋ผ์ ์ ๋ต์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
for(int tc=1; tc<=t; tc++) {
long n = scan.nextLong();
long leftNum = (n-1) * (n-1) * 2 + 1;
long rightNum = (n*n*2) - 1;
System.out.println("#" + tc + " " + leftNum + " " + rightNum);
}
scan.close();
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SW Expert Academy] - (D3)10032. ๊ณผ์ ๋ถ๋ฐฐ (0) | 2020.06.25 |
---|---|
[SW Expert Academy] - (D2)1979. ์ด๋์ ๋จ์ด๊ฐ ๋ค์ด๊ฐ ์ ์์๊น (0) | 2020.06.23 |
[SW Expert Academy] - (D3)3809. ํ์ญ์ด์ ์ ์ ๋์ด (0) | 2020.06.15 |
[SW Expert Academy] - (D3)5356. ์์์ด์ ์ธ๋ก๋ก ๋งํด์ (0) | 2020.06.14 |
[SW Expert Academy] - (D3)4466. ์ต๋ ์ฑ์ ํ ๋ง๋ค๊ธฐ (0) | 2020.06.13 |
๋๊ธ