๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB 

 

SW Expert Academy

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

swexpertacademy.com


1. ๋ฌธ์ œ์š”์•ฝ

4x4 ํฌ๊ธฐ์˜ ๊ฒฉ์žํŒ์—์„œ 0~9์‚ฌ์ด ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ์„ ๋•Œ,

4๋ฐฉํ–ฅ์œผ๋กœ ์ธ์ ‘ํ•œ ๊ฒฉ์ž๋กœ ์ด 6๋ฒˆ ์ด๋™ํ•œ๋‹ค. ๊ฐ ์นธ์˜ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ฐจ๋ก€๋กœ ์ด์–ด๋ถ™์ผ ๋•Œ

๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ผ๊ณฑ ์ž๋ฆฌ ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๊ฒฉ์žํŒ์„ ๋ฒ—์–ด๋‚˜๋Š” ์ด๋™์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ํ’€์ด

์„ธ ๋ฒˆ์˜ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ์žˆ์—ˆ๋‹ค.

1. ์ฒ˜์Œ์—๋Š” ์ค‘๋ณต์ˆœ์—ด๋กœ ๋ฐฉํ–ฅ์„ ์ค„์„ธ์›Œ์„œ ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ํ–ˆ๋‹ค.

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ค‘๋ณต์ˆœ์—ด๋กœ 7์ž๋ฆฌ ๋‹ค ๋ฝ‘๊ณ  ๋‚˜์„œ ๊ฒฉ์žํŒ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ์ผ์ผ์ด ์ฒดํฌํ•ด์ค˜์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

ํ…Œ์ผ€๋Š” ๋‚˜์˜ค๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. (10๊ฐœ ์ค‘ 3๊ฐœ ํ†ต๊ณผ)

2. ๋˜ dfs์˜ ์‹œ๊ฐ„์ดˆ๊ณผ ๋Šช์— ๋น ์งˆ๊นŒ๋ด ๋‘๋ ค์›Œ์„œ bfs๋กœ ํ’€๋ฆฌ๋‚˜? ์‹ถ์–ด์„œ ํ’€์–ด๋ดค๋Š”๋ฐ ๋‚˜๋Š” ์•ˆํ’€๋ ธ๋‹ค.

๋„์ฐฉํ•˜๋Š” ์ตœ๋‹จ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฉด bfs๋ฅผ ์“ฐ๋Š”๋ฐ, ์ด๊ฑด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋ด์•ผํ•˜๋ฏ€๋กœ dfs๊ฐ€ ์ ์ ˆํ•œ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

3. dfs๋กœ 7์ž๋ฆฌ ๋ฝ‘๊ณ  ๊ธฐ์ €์กฐ๊ฑด์—์„œ list ์•ˆ์˜ ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉด list์— ๋„ฃ์–ด์ฃผ๊ณ  ๊ฐ™์€๊ฒŒ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ returnํ•˜์—ฌ list์˜ size๋ฅผ ans๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค. ๊ทผ๋ฐ ๋˜ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.  (10๊ฐœ ์ค‘ 4๊ฐœ ํ†ต๊ณผ) 

 

๊ฒฐ๊ตญ ์†”๋ฃจ์…˜์„ ์ฐพ์•„๋ดค๋Š”๋ฐ

ํ•ด๋‹ต์€ HashSet์ด์—ˆ๋‹ค. 

HashSet์€ hashCode()์™€ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์ค‘๋ณต๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

(์• ์ดˆ์— ์ค‘๋ณต์ฒดํฌํ•ด์„œ ์ค‘๋ณต์žˆ์œผ๋ฉด ์ €์žฅ์„ ์•ˆํ•˜๋Š”๊ฑด๊ฐ€?)

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.

HashSet<String> set = new HashSet<> ();

set.add(๋ฌธ์ž์—ด);

=> set์ด ์•Œ์•„์„œ ์ค‘๋ณต๊ฐ’์„ ๊ฑธ๋Ÿฌ์ฃผ๊ณ  ์ €์žฅํ•œ๋‹ค.

 

3. ์ฝ”๋“œ

๋”๋ณด๊ธฐ

import java.io.*;
import java.util.*;

public class SW_2819_๊ฒฉ์žํŒ์ˆซ์ž์ด์–ด๋ถ™์ด๊ธฐ {

	static int ans, sy, sx;
	static int[] tgt;
	static int[][] map;
	static HashSet<String> set;
	
	static int[] dy= {-1,1,0,0};
	static int[] dx= {0,0,-1,1};
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int T = Integer.parseInt(br.readLine());
		
		for (int tc=1; tc<=T; tc++) {
			map = new int[4][4];
			set = new HashSet<> ();
			
			for (int i=0; i<4; i++) {
				st = new StringTokenizer(br.readLine());
				for (int j=0; j<4; j++) {
					map[i][j] = Integer.parseInt(st.nextToken());
				}
			} //์ž…๋ ฅ ์™„
			
			ans = 0;
			solution();
			ans = set.size();
			System.out.println("#"+tc+" "+ans);
		}
	}
	
	static void solution() {
		for (int i=0; i<4; i++) {
			for (int j=0; j<4; j++) {
				sy=i;
				sx=j;
				String start = Integer.toString(map[i][j]);
				dfs(i, j, 1, start);
			}
		}
	}
	
	static void dfs(int y, int x, int d, String res) {
		if (d==7) {
			set.add(res);
			return;
		}
		
		for (int dir=0; dir<4; dir++) {
			int ny=y+dy[dir];
			int nx=x+dx[dir];
			if (ny<0||ny>=4||nx<0||nx>=4) continue;
			
			dfs(ny, nx, d+1,res+map[ny][nx]);
		}
	}
	
}

4. ์‚ฌ๋‹ด

๋” ๋งŽ์ด ํ’€์–ด๋ณด์ž ๊ฐˆ ๊ธธ์ด ์ฐธ ๋ฉ€๊ตฌ๋‚˜..

hashset์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์•Œ์•˜๋‹ค ์ค‘๋ณต์ œ๊ฑฐ๋‹ˆ๊นŒ ์•ž์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์จ๋จน์„ ๋“ฏ