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์ด๋ผ๋ ์๋ก์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์๋ค ์ค๋ณต์ ๊ฑฐ๋๊น ์์ผ๋ก ์ ์ฉํ๊ฒ ์จ๋จน์ ๋ฏ
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 7733. ์น์ฆ ๋๋ - Java (0) | 2022.11.20 |
---|---|
[SWEA] 4727. ๊ฒฌ์ฐ์ ์ง๋ (18.8.6 ์์ ) - Java (0) | 2022.11.20 |
[SWEA] 8382. ๋ฐฉํฅ ์ ํ - Java (0) | 2022.11.14 |
[SWEA] 1824. ํ์ง์ด์ ํ๋ก๊ทธ๋จ ๊ฒ์ฆ - Java (0) | 2022.11.14 |
[SWEA] 1486. ์ฅํ์ด์ ๋์ ์ ๋ฐ - Java (0) | 2022.11.13 |