๐Ÿ“ algorithm

[๋ฐฑ์ค€] 2564 ๊ฒฝ๋น„์› Java ๋ฌธ์ œ ํ’€์ด (์‚ผ์„ฑ sw ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ IM ๋Œ€๋น„ - 4)

c0zi 2024. 2. 6. 15:47

๋ฌธ์ œ ๋งํฌ

โœ” ๋ถ„๋ฅ˜

๋งŽ์€ ์กฐ๊ฑด ๋ถ„๊ธฐ, ๊ตฌํ˜„

๐Ÿ“‘ ๋ฌธ์ œ ์„ค๋ช…

๋™๊ทผ์ด๋Š” ๋ฌด์ธ ๊ฒฝ๋น„ ํšŒ์‚ฌ ๊ฒฝ๋น„์›์œผ๋กœ ํ•ญ์ƒ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํ˜ธ์ถœ์ด ๋“ค์–ด์˜ค๋ฉด ๊ฒฝ๋น„์ฐจ๋ฅผ ๋ชฐ๊ณ  ๊ทธ ๊ณณ์œผ๋กœ ๋‹ฌ๋ ค๊ฐ€์•ผ ํ•œ๋‹ค. ๋™๊ทผ์ด๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์€ ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ๋ธ”๋ก์œผ๋กœ ๋ธ”๋ก ์ค‘๊ฐ„์„ ๊ฐ€๋กœ์งˆ๋Ÿฌ ์ฐจ๊ฐ€ ํ†ต๊ณผํ• ๋งŒํ•œ ๊ธธ์ด ์—†๋‹ค. ์ด ๋ธ”๋ก ๊ฒฝ๊ณ„์— ๋ฌด์ธ ๊ฒฝ๋น„๋ฅผ ์˜๋ขฐํ•œ ์ƒ์ ๋“ค์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€๋กœ์˜ ๊ธธ์ด๊ฐ€ 10, ์„ธ๋กœ์˜ ๊ธธ์ด๊ฐ€ 5์ธ ๋ธ”๋ก์˜ ๊ฒฝ๊ณ„์— ๋ฌด์ธ ๊ฒฝ๋น„๋ฅผ ์˜๋ขฐํ•œ 3๊ฐœ์˜ ์ƒ์ ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ด๋“ค์€ 1, 2, 3์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๊ณ , ๋™๊ทผ์ด๋Š” X๋กœ ํ‘œ์‹œํ•œ ์œ„์น˜์— ์žˆ๋‹ค.

๊ทธ๋ฆผ 1

 

1๋ฒˆ ์ƒ์ ์—์„œ ํ˜ธ์ถœ์ด ๋“ค์–ด ์™”์„ ๋•Œ ๋™๊ทผ์ด๊ฐ€ ๋ธ”๋ก์„ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„ ์ด๋™ํ•˜๋ฉด ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 12๊ฐ€ ๋œ๋‹ค. ๋ฐ˜๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„ ์ด๋™ํ•˜๋ฉด ์ด๋™ ๊ฑฐ๋ฆฌ๋Š” 18์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋™๊ทผ์ด๊ฐ€ 1๋ฒˆ ์ƒ์ ์œผ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” 12๊ฐ€ ๋œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋™๊ทผ์ด์˜ ์œ„์น˜์—์„œ 2๋ฒˆ ์ƒ์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” 6, 3๋ฒˆ ์ƒ์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” 5๊ฐ€ ๋œ๋‹ค.

๋ธ”๋ก์˜ ํฌ๊ธฐ์™€ ์ƒ์ ์˜ ๊ฐœ์ˆ˜ ๋ฐ ์œ„์น˜ ๊ทธ๋ฆฌ๊ณ  ๋™๊ทผ์ด์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋™๊ทผ์ด์˜ ์œ„์น˜์™€ ๊ฐ ์ƒ์  ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

โŒจ ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ธ”๋ก์˜ ๊ฐ€๋กœ์˜ ๊ธธ์ด์™€ ์„ธ๋กœ์˜ ๊ธธ์ด๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ƒ์ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ธ”๋ก์˜ ๊ฐ€๋กœ์˜ ๊ธธ์ด์™€ ์„ธ๋กœ์˜ ๊ธธ์ด, ์ƒ์ ์˜ ๊ฐœ์ˆ˜๋Š” ๋ชจ๋‘ 100์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ด์–ด ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ƒ์ ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ƒ์ ์˜ ์œ„์น˜๋Š” ๋‘ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์ฒซ์งธ ์ˆ˜๋Š” ์ƒ์ ์ด ์œ„์น˜ํ•œ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, 1์€ ๋ธ”๋ก์˜ ๋ถ์ชฝ, 2๋Š” ๋ธ”๋ก์˜ ๋‚จ์ชฝ, 3์€ ๋ธ”๋ก์˜ ์„œ์ชฝ, 4๋Š” ๋ธ”๋ก์˜ ๋™์ชฝ์— ์ƒ์ ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‘˜์งธ ์ˆ˜๋Š” ์ƒ์ ์ด ๋ธ”๋ก์˜ ๋ถ์ชฝ ๋˜๋Š” ๋‚จ์ชฝ์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ ๋ธ”๋ก์˜ ์™ผ์ชฝ ๊ฒฝ๊ณ„๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ์ƒ์ ์ด ๋ธ”๋ก์˜ ๋™์ชฝ ๋˜๋Š” ์„œ์ชฝ์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ ๋ธ”๋ก์˜ ์œ„์ชฝ ๊ฒฝ๊ณ„๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ๋™๊ทผ์ด์˜ ์œ„์น˜๊ฐ€ ์ƒ์ ์˜ ์œ„์น˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ƒ์ ์˜ ์œ„์น˜๋‚˜ ๋™๊ทผ์ด์˜ ์œ„์น˜๋Š” ๋ธ”๋ก์˜ ๊ผญ์ง“์ ์ด ๋  ์ˆ˜ ์—†๋‹ค.

๐Ÿ–ฅ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋™๊ทผ์ด์˜ ์œ„์น˜์™€ ๊ฐ ์ƒ์  ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ํ’€์ด

 

- ๋‚˜๋Š” ๋™๊ทผ์ด์™€ ์ƒ์ ์ด ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ, ์˜†์— ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งˆ์ฃผ๋ณด๋Š” ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ’€์–ด๋ณด์•˜๋‹ค.

- ์กฐ๊ธˆ ๋งˆ์ฃผ๋ณด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ณ ๋ฏผ ์ค‘์ด๋‹ค.

- ๋‹ค๋ฅธ ๋ถ„๋“ค์€ 0,0๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์„ธ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์‹  ๋ถ„๋“ค๋„ ๊ณ„์‹  ๊ฒƒ ๊ฐ™๋‹ค.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	// br, st, sb ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static int w, h, testCase, minDist = 0;

	public static void main(String[] args) throws IOException {
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = new StringTokenizer(br.readLine());

		// ๋ธ”๋ก์˜ ๊ฐ€๋กœ ์„ธ๋กœ ๊ธธ์ด ์ดˆ๊ธฐํ™”
		w = Integer.parseInt(st.nextToken());
		h = Integer.parseInt(st.nextToken());

		// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜ ์ž…๋ ฅ ๋ฐ›๊ธฐ
		testCase = Integer.parseInt(br.readLine());

		// ์œ„์น˜์™€ ๊ธธ์ด ๋ฐฐ์—ด ์„ ์–ธ
		int[] d = new int[testCase + 1];
		int[] l = new int[testCase + 1];

		// ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ฐœ์ˆ˜ + 1(๋™๊ทผ)๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์œ„์น˜์™€ ๊ธธ์ด์ž…๋ ฅ ๋ฐ›๊ธฐ
		for (int i = 0; i <= testCase; i++) {
			st = new StringTokenizer(br.readLine());
			d[i] = Integer.parseInt(st.nextToken());
			l[i] = Integer.parseInt(st.nextToken());
		}

		System.out.println(calculate(d, l));
	}

	public static int calculate(int[] d, int[] l) {
		// ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋งŒํผ ๋ฐ˜๋ณต
		for (int i = 0; i < testCase; i++) {

			// 1. ๋™๊ทผ๊ณผ ์ƒ์ ์ด ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ๊ฒฝ์šฐ
			if (d[i] == d[testCase]) {
				minDist += Math.abs(l[testCase] - l[i]);
			
			// 2. ๋™๊ทผ๊ณผ ์ƒ์ ์ด ๋งˆ์ฃผ๋ณด๋Š” ๊ฒฝ์šฐ
			} else if (d[i] == 1 && d[testCase] == 2 || d[i] == 2 && d[testCase] == 1) {
				// ์ƒ, ํ•˜๋กœ ๋งˆ์ฃผ๋ณด๋Š” ๊ฒฝ์šฐ
				minDist += (l[i] + l[testCase] <= 2 * w - (l[i] + l[testCase])) ? 
						l[i] + l[testCase] + h : 2 * w - (l[i] + l[testCase]) + h;
				
			} else if (d[i] == 3 && d[testCase] == 4 || d[i] == 4 && d[testCase] == 3) {
				// ์ขŒ, ์šฐ๋กœ ๋งˆ์ฃผ๋ณด๋Š” ๊ฒฝ์šฐ
				minDist += (l[i] + l[testCase] <= 2 * h - (l[i] + l[testCase])) ? 
						l[i] + l[testCase] + w : 2 * h - (l[i] + l[testCase]) + w;
				
			// 3. ๋™๊ทผ๊ณผ ์ƒ์ ์ด ์˜†์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ
			} else {
				if (d[i] % 2 == 1)
					minDist += l[testCase];
				else
					minDist += w - l[testCase];
				if (d[testCase] % 2 == 1)
					minDist += l[i];
				else
					minDist += h - l[i];
			}

		}
		return minDist;
	}
}

 

๊ทธ๋ฆฌ๊ณ , ๋“œ๋””์–ด IM ๋“ฑ๊ธ‰ ๋ฌธ์ œ์ง‘๋“ค์„ ๋ชจ๋‘ ํ’€๊ธดํ–ˆ๋‹ค.

 

 

4์ฃผ๋™์•ˆ ์Šคํ„ฐ๋”” ํ•˜๋ฉด์„œ ์ผ์ฃผ์ผ์— 4๋ฌธ์ œ์”ฉ ํ’€์—ˆ๋Š”๋ฐ, ๋ธŒ๋ก ์ฆˆ๋„ ๋ชป ํ’€๋˜ ๋‚ด๊ฐ€ ์‹ค๋ฒ„ 1์ด๋ผ๋‹ˆ... ๊ทธ๋ž˜๋„ ์„ฑ์žฅํ•œ ๊ฒƒ ๊ฐ™์•„ ๋ฟŒ๋“ฏํ•˜๋‹ค. ใ…Žใ…Žใ…Žใ…Ž