๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1730_ํŒํ™”

๋ฟŒ์•ผ._. 2024. 3. 27. 21:41

Silver IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1730)

< ํŒํ™” >

 

๋ฌธ์ œ ํ’€์ด 

 

์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด์„œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฌด์‹œํ•œ๋‹ค. ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ์ง€๋‚ฌ๋Š”์ง€, ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ์ง€๋‚ฌ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ ๊ธฐ๋กํ•œ๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class _1730_ { // ํŒํ™”
	static int x, y, n;
	static char arr[][];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		n = Integer.parseInt(bf.readLine());

		arr = new char[n][n];
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				arr[i][j]='.';
			}
		}

		String str = bf.readLine();

		x = 0;
		y = 0;
		boolean flag;
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c == 'D') {
				flag = DU(x + 1, y);
				if (flag) {
					x += 1;
				}
			} else if (c == 'R') {
				flag = RL(x, y + 1);
				if (flag) {
					y += 1;
				}
			} else if (c == 'L') {
				flag = RL(x, y - 1);
				if (flag) {
					y -= 1;
				}
			} else {
				flag = DU(x - 1, y);
				if (flag) {
					x -= 1;
				}
			}
		}

		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				bw.write(arr[i][j]+"");
			}
			bw.write("\n");
		}
		bw.flush();
	}

	private static boolean DU(int a, int b) {
		if (a >= 0 && a < n && b >= 0 && b < n) {
			if (arr[x][y] == '-') {
				arr[x][y] = '+';
			} else if(arr[x][y] == '.'){
				arr[x][y] = '|';
			}

			if (arr[a][b] == '-') {
				arr[a][b] = '+';
			} else if(arr[a][b] == '.'){
				arr[a][b] = '|';
			}
			return true;
		}
		return false;
	}

	private static boolean RL(int a, int b) {
		if (a >= 0 && a < n && b >= 0 && b < n) {
			if (arr[x][y] == '|') {
				arr[x][y] = '+';
			} else if(arr[x][y] == '.'){
				arr[x][y] = '-';
			}

			if (arr[a][b] == '|') {
				arr[a][b] = '+';
			} else if(arr[a][b]=='.'){
				arr[a][b] = '-';
			}
			return true;
		}
		return false;
	}
}
๋ณ€์ˆ˜)
n : ๋ชฉํŒ์˜ ํฌ๊ธฐ
arr : ๋ชฉํŒ
str : ๋กœ๋ด‡ํŒ”์˜ ์›€์ง์ž„
x, y : ๋กœ๋ด‡ ์œ„์น˜
flag : ์ด๋™ ์—ฌ๋ถ€

 

๋ชฉํŒ์˜ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋ชฉํŒ์„ '.'์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๋กœ๋ด‡ํŒ”์˜ ์›€์ง์ž„์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋กœ๋ด‡ํŒ”์˜ ์›€์ง์ž„๋Œ€๋กœ ์›€์ง์ธ๋‹ค.

 

1) D๋ผ๋ฉด DU ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด x+1์„ ํ•œ๋‹ค.

2) R๋ผ๋ฉด RL ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด y+1์„ ํ•œ๋‹ค.

3) L๋ผ๋ฉด RL ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด y-1์„ ํ•œ๋‹ค. 

4) U๋ผ๋ฉด DUํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด x-1์„ ํ•œ๋‹ค.

 

์ตœ์ข… ๋ชฉํŒ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

DU (int a, int b)

์ด๋™ํ•  ์œ„์น˜๊ฐ€ ๋ชฉํŒ ๋ฒ”์œ„ ์•ˆ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๋ฒ”์œ„ ์•ˆ์ด๋ผ๋ฉด ํ˜„์žฌ ์œ„์น˜ ๊ฐ’์ด '-'๋ผ๋ฉด '+'๋กœ ์ €์žฅํ•˜๊ณ  '.'๋ผ๋ฉด '|'๋กœ ์ €์žฅํ•œ๋‹ค. ์•„๋ž˜๋กœ ์ด๋™ํ•œ ์œ„์น˜ ๊ฐ’์ด '-'๋ผ๋ฉด '+'๋กœ ์ €์žฅํ•˜๊ณ  '.'๋ผ๋ฉด '|'๋กœ ์ €์žฅํ•œ๋‹ค. ๋กœ๋ด‡์ด ์ด๋™ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋™ํ•  ์œ„์น˜๊ฐ€ ๋ชฉํŒ ๋ฒ”์œ„ ์•ˆ์ด ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

RL (int a, int b)

์ด๋™ํ•  ์œ„์น˜๊ฐ€ ๋ชฉํŒ ๋ฒ”์œ„ ์•ˆ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๋ฒ”์œ„ ์•ˆ์ด๋ผ๋ฉด ํ˜„์žฌ ์œ„์น˜ ๊ฐ’์ด '|'๋ผ๋ฉด '+'๋กœ ์ €์žฅํ•˜๊ณ  '.'๋ผ๋ฉด '-'๋กœ ์ €์žฅํ•œ๋‹ค. ์•„๋ž˜๋กœ ์ด๋™ํ•œ ์œ„์น˜ ๊ฐ’์ด '|'๋ผ๋ฉด '+'๋กœ ์ €์žฅํ•˜๊ณ  '.'๋ผ๋ฉด '-'๋กœ ์ €์žฅํ•œ๋‹ค. ๋กœ๋ด‡์ด ์ด๋™ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋™ํ•  ์œ„์น˜๊ฐ€ ๋ชฉํŒ ๋ฒ”์œ„ ์•ˆ์ด ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.