๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[SW Expert Academy] - (D3)8016. ํ™€์ˆ˜ ํ”ผ๋ผ๋ฏธ๋“œ

by ์ฃผ๋ฐœ2 2020. 6. 20.
๋ฐ˜์‘ํ˜•

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWvzGUKKPVwDFASy&categoryId=AWvzGUKKPVwDFASy&categoryType=CODE

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

ํ‹€๋ฆฐ ์ฝ”๋“œ(์‹œ๊ฐ„ ์ดˆ๊ณผ)

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();
	}

}

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€