๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
2๏ธโƒฃ Java/Problem Solving

[Java Algorithm] ํ†ฑ๋‹ˆ๋ฐ”ํ€ด BOJ #14891

by seolhee2750 2022. 8. 3.
๋ฌธ์ œ

https://www.acmicpc.net/problem/14891

 

14891๋ฒˆ: ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

์ด 8๊ฐœ์˜ ํ†ฑ๋‹ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด 4๊ฐœ๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋˜, ํ†ฑ๋‹ˆ๋Š” N๊ทน ๋˜๋Š” S๊ทน ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

www.acmicpc.net

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	
	static char[][] ns = new char[4][]; // ๊ฐ ๊ธฐ์–ด๋“ค์˜ n, s๊ทน ์ •๋ณด
	static int[] dirs; // ๊ฐ ๊ธฐ์–ด๋“ค์ด ๊ฐ–๊ฒŒ ๋  ํšŒ์ „ ๋ฐฉํ–ฅ ์ •๋ณด
	
	// ๊ฐ ํ†ฑ๋‹ˆ์˜ ํšŒ์ „ ๋ฐฉํ–ฅ์— ๋งž๊ฒŒ ํšŒ์ „์‹œ์ผœ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
	public static void spin() {
		int tmp = 0;
		
		for(int i = 0; i < 4; i++) {
			// ์‹œ๊ณ„ ๋ฐฉํ–ฅ
			if(dirs[i] == 1) {
				tmp = ns[i][7];
				for(int j = 7; j > 0; j--) ns[i][j] = ns[i][j - 1];
				ns[i][0] = (char)tmp;
			}
			// ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ
			if(dirs[i] == -1) {
				tmp = ns[i][0];
				for(int j = 0; j < 7; j++) ns[i][j] = ns[i][j + 1];
				ns[i][7] = (char)tmp; 
			}
		}
	}

	public static void main(String[] args) throws Exception {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		for(int i = 0; i < 4; i++) ns[i] = in.readLine().toCharArray();
		int num = Integer.parseInt(in.readLine());
		
		for(int i = 0; i < num; i++) {
			st = new StringTokenizer(in.readLine());
			int tobni = Integer.parseInt(st.nextToken()) - 1; // ํšŒ์ „์„ ์‹œ์ž‘ํ•˜๋Š” ํ†ฑ๋‹ˆ์˜ ์ธ๋ฑ์Šค
			dirs = new int[4];
			dirs[tobni] = Integer.parseInt(st.nextToken());
			
			// ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๊ฒ€์‚ฌ
			for(int j = (tobni - 1); j >= 0; j--) {
				if(ns[j][2] == ns[j+1][6]) break;
				else dirs[j] = -dirs[j+1];
			}
			// ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๊ฒ€์‚ฌ
			for(int j = (tobni + 1); j < 4; j++) {
				if(ns[j][6] == ns[j-1][2]) break;
				else dirs[j] = -dirs[j-1];
			}
			
			spin(); // ๊ฐ ํ†ฑ๋‹ˆ ํšŒ์ „
		}
		
		// ๊ฒฐ๊ณผ ์ถœ๋ ฅ
		int answer = 0;
		int[] score = {1, 2, 4, 8};
		for(int i = 0; i < 4; i++) {
			if(ns[i][0] == '1') answer += score[i];
		}
		System.out.println(answer);
	}

}

๐Ÿ‘‰ ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ

 

[๋ณ€์ˆ˜ ์„ค๋ช…]

  • static char[][] ns : ์ž…๋ ฅ๋˜๋Š” ๊ธฐ์–ด๋“ค์˜ n, s๊ทน ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค. (n๊ทน 0, s๊ทน 1)
  • static int[] dirs : ๊ฐ ๊ธฐ์–ด๋“ค์ด ํšŒ์ „ํ•ด์•ผ ํ•  ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง„๋‹ค. (์‹œ๊ณ„ 1, ๋ฐ˜์‹œ๊ณ„ -1, ํšŒ์ „์•ˆํ•จ 0)
  • tobni : ํšŒ์ „์„ ์‹œ์ž‘ํ•˜๋Š” ํ†ฑ๋‹ˆ์˜ ์ธ๋ฑ์Šค

 

[ํ’€์ด ์„ค๋ช…]

ํšŒ์ „์„ ์‹œ์ž‘ํ•˜๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๊ธฐ์ค€, ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ๊ฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋งˆ๋‹ค ํšŒ์ „ ์œ ๋ฌด ๋ฐ ๋ฐฉํ–ฅ์„ ์ฐพ๊ณ ,

๊ฐ ํ†ฑ๋‹ˆ์˜ ํšŒ์ „๋ฐฉํ–ฅ์— ๋งž๊ฒŒ tmp ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ์ด๋™์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ๋กœ ํšŒ์ „ํ•˜๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ -1ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›์•˜๋‹ค. (์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด)
    ๊ทธ๋ฆฌ๊ณ  dirs ๋ฐฐ์—ด์˜ tobni ์ž๋ฆฌ์— ํ•ด๋‹น ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „ ๋ฐฉํ–ฅ์„ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค. (๋‚˜๋จธ์ง€ ์ž๋ฆฌ๋Š” 0)
  • ํšŒ์ „ ์‹œ์ž‘ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์‚ฌํ•˜์˜€๋Š”๋ฐ,
    ํ•ญ์ƒ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 2๋ฒˆ ์ธ๋ฑ์Šค์™€ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 6๋ฒˆ ์ธ๋ฑ์Šค๊ฐ€ ๋งž๋‹ฟ์œผ๋ฏ€๋กœ
    ์ด๋Ÿฌํ•œ ์ ์„ ์ด์šฉํ•˜์—ฌ ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์˜ ๊ฐ’์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฐฉํ–ฅ์„ - ํ•˜์—ฌ dirs์— ์ €์žฅํ–ˆ๋‹ค.
  • ๊ฒ€์‚ฌ ์™„๋ฃŒ ์‹œ spin ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „์„ ์ง„ํ–‰ํ–ˆ๋‹ค.
    dirs์— ์ €์žฅ๋œ ๊ฐ’์ด 0์ผ ๊ฒฝ์šฐ ํšŒ์ „ํ•˜์ง€ ์•Š๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์ด๋ฏ€๋กœ ๋”ฐ๋กœ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ณ ,
    1(์‹œ๊ณ„ ๋ฐฉํ–ฅ)์ผ ๊ฒฝ์šฐ์™€ -1(๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ)์ผ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ํšŒ์ „์„ ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.
  • ์‹œ๊ณ„ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋งˆ์ง€๋ง‰, ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ tmp์— ์ €์žฅํ•˜๊ณ 
    ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ์ด๋™์‹œํ‚ค๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ํ’€์ด์— ์‹œ๊ฐ„์„ ์—„์ฒญ ๋งŽ์ด ์†Œ์š”ํ–ˆ๋‹ค. ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ์ง€๋งŒ,
    ์ž๋ฐ” ์–ธ์–ด๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„๋„ ์žˆ๊ฒ ๊ณ ,
    ๋‚ด๊ฐ€ ๊ผผ๊ผผํžˆ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ฌธ์ œ๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์ƒ๊ฐํ•ด์ฃผ์–ด์•ผ ํ•  ์˜ˆ์™ธ๋‚˜ ์กฐ๊ฑด๋“ค์„ ๋ช…ํ™•ํžˆ ์ง€์ผœ์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฏ€๋กœ
    ๋”์šฑ ๊ผผ๊ผผํžˆ ๋ฉ”๋ชจํ•˜๊ณ  ๊ณ„ํšํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ์•ผ ํ•˜๊ฒ ๋‹ค.

๋Œ“๊ธ€