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

[SW Expert Academy] - (D3)1493. ์ˆ˜์˜ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ

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

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b-QGqADMBBASw&categoryId=AV2b-QGqADMBBASw&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 p = scan.nextInt();
			int q = scan.nextInt();
			int result = 0;
			
			/* ์ฒซ๋ฒˆ์งธ ๊ฐ’์— ๋Œ€ํ•œ x, y ์ขŒํ‘œ */
			int sum1 = 0;
			int x1 = 0;
			int y1 = 0;
			
			for(int i=1; ; i++) {
				sum1 += i;
				if(sum1 >= p) {
					x1 = i - (sum1-p);
					y1 = (i+1) - x1;
					break;
				}
			}
			
			/* ๋‘๋ฒˆ์งธ ๊ฐ’์— ๋Œ€ํ•œ  x, y ์ขŒํ‘œ */
			int sum2 = 0;
			int x2 = 0;
			int y2 = 0;
			for(int i=1; ; i++) {
				sum2 += i;
				if(sum2 >= q) {
					x2 = i - (sum2-q);
					y2 = (i+1) - x2;
					break;
				}
			}
			
			/* ์ตœ์ข… x, y ์ขŒํ‘œ */
			int x3 = x1 + x2;
			int y3 = y1 + y2;
			int sum3 = 1;
			for(int i=1; i<(x3+y3)-1; i++) {
				sum3 += i;
			}
			result = sum3 + (x3-1);
			
			System.out.println("#" + tc + " " + result);
			//System.out.println(x1 + " " + y1 + " " + x2 + " " + y2);
			
		}
		

		
		scan.close();
	}

}

ํ’€์ด

์Œ.. ๊ทœ์น™์„ ์ฐพ๋Š”๊ฒŒ ์ข€ ํ—ท๊ฐˆ๋ ธ๋‹ค.

๋ฌธ์ œ์—์„œ๋Š” ์ขŒํ‘œ๊ฐ€ ์•„๋‹Œ ์ขŒํ‘œ์˜ ๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๊ทธ๋ฆผ์—์„œ 1์˜ ์ขŒํ‘œ๋Š” (1 , 1) ์ด๊ณ , 5์˜ ์ขŒํ‘œ๋Š” (2 , 2) ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ์—ฐ์‚ฐ โ˜…๋Š” (1 + 2, 1 + 2) ์˜ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ํ’€์—ˆ๋‹ค.

 1. ์ฃผ์–ด์ง„ ๋‘๊ฐœ์˜ ๊ฐ’์— ๋Œ€ํ•œ ์ขŒํ‘œ๋ฅผ ์ฐพ๋Š”๋‹ค.

 2. ๋‘ ์ขŒํ‘œ๊ฐ’์„ x, y ์ขŒํ‘œ๋ผ๋ฆฌ ๋”ํ•œ๋‹ค

 3. ์ตœ์ข…์ ์œผ๋กœ ๋‚˜์˜จ x, y ์ขŒํ‘œ์˜ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

๋ฌธ์ œ์—์„œ ํ‰๋ฉด์€ ํ•ญ์ƒ ๋Œ€๊ฐ์„  ์•„๋ž˜์ชฝ์œผ๋กœ ๊ฐ’์ด ์ง„ํ–‰๋œ๋‹ค.

๊ทธ ๊ฐฏ์ˆ˜๋Š” 1๊ฐœ 2๊ฐœ 3๊ฐœ ... n๊ฐœ ์‹์ด๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ’์ด ์ฃผ์–ด์กŒ์„๋•Œ, ๊ทธ ๊ฐ’์ด ๋ช‡๋ฒˆ์งธ ๋Œ€๊ฐ์„ ์— ํ•ด๋‹นํ•˜๋Š”์ง€๋ถ€ํ„ฐ ์ฐพ์•˜๋‹ค.

๋ช‡๋ฒˆ์งธ ๋Œ€๊ฐ์„ ์— ์กด์žฌํ•˜๋Š”์ง€๋Š” 1๋ถ€ํ„ฐ ๋”ํ•œ๊ฐ’์ด p๋ณด๋‹ค ์ปค์งˆ๋•Œ์˜ i๊ฐ’์ด๋‹ค.

 

9(3, 2)๋ฅผ ์˜ˆ๋กœ๋“ค๋ฉด 1+2+3+4 = 10(sum) ์ด๊ณ , 9(p)๋ณด๋‹ค ํฌ๋ฏ€๋กœ 4๋ฒˆ์งธ ๋Œ€๊ฐ์„ ์˜ ๋ผ์ธ(i=4)์— ์กด์žฌํ•œ๋‹ค.

4๋ฒˆ์งธ ๋ผ์ธ์— ์กด์žฌํ•˜๋Š” ์ˆ˜๋“ค์€ x์ขŒํ‘œ + y์ขŒํ‘œ์˜ ๊ฐ’์ด 5์ด๋‹ค.

 

x์˜ ์ขŒํ‘œ๋Š” i๊ฐ’์—์„œ (sum-p) ๋ฅผ ๋บ€ ๊ฐ’์ด๊ณ ,

x + y = (i+1) ์ด๋ผ๋Š” ์‹์ด ์„ฑ๋ฆฝํ•˜๋ฏ€๋กœ, y = (i+1) - x ๋ผ๋Š” ์‹์ด ์„ฑ๋ฆฝํ•œ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ x, y ์ขŒํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

x1 = i - (sum1-p);
y1 = (i+1) - x1;

์œ„ ๊ทœ์น™์œผ๋กœ ์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ ๊ฐ’์— ๋Œ€ํ•œ x, y ์ขŒํ‘œ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ตœ์ข…์ ์œผ๋กœ ๋‘ x, y ์ขŒํ‘œ์˜ ํ•ฉ์—๋Œ€ํ•œ ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

์ด๊ฑฐ๋Š” ๋‚˜๋Š” (1, y)์— ์กด์žฌํ•˜๋Š” ๊ฐ€์žฅ ์ขŒ์ธก ๊ผญ๋Œ€๊ธฐ๊ฐ’์„ ๋จผ์ € ์ฐพ์•„์ฃผ์—ˆ๋‹ค.

(1,1) = 1

(1,2) = 2

(1,3) = 4

(1,4) = 7

(1,5) = 11 ...

์œ„ ์‹์—๋„ 1, 2, 3, 4 ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ทœ์น™์ด ์กด์žฌํ•œ๋‹ค.

 

13(3, 3)์„ ์˜ˆ๋กœ๋“ค๋ฉด ๊ฐ€์žฅ ์ขŒ์ธก ๊ผญ๋Œ€๊ธฐ์˜ ๊ฐ’์€ 11(1, 5) ์ด๋‹ค.

11 = 1+ 1+2+3+4 ์˜ ๊ฐ’์ด๋‹ค.

์ฆ‰ i=1 ๋ถ€ํ„ฐ (3+3)-2 ๊นŒ์ง€ ๋”ํ•œ ๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค.

for(int i=1; i<(x3+y3)-1; i++) {
	sum3 += i;
}

๋”ฐ๋ผ์„œ ์œ„ for๋ฌธ์œผ๋กœ ๊ฐ€์žฅ ์™ผ์ชฝ ๊ผญ๋Œ€๊ธฐ์˜ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ ,

 

๊ทธ ์ดํ›„์— ํ•ด๋‹น x, y ์ขŒํ‘œ๊ฐ’์€ ๋ช‡๊ฐœ์˜ x์ขŒํ‘œ๋งŒํผ ์ด๋™ํ–ˆ๋Š”์ง€ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

result = sum3 + (x3-1);

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€

๐Ÿ”HALO