https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
1. ๋ฌธ์ ์์ฝ
NxNํฌ๊ธฐ์ map์์ ํ๋ณผ์ด ์ด๋ํ๋๋ฐ,
๋น์นธ(0)์ ๋ง๋ ๊ฒฝ์ฐ, ๋ฐฉํฅ ๊ทธ๋๋ก ์ ์งํ๋ค.
์ํ(6~10)์ ๋ง๋ ๊ฒฝ์ฐ, ๊ฐ์ ์ํ์ ๋ค๋ฅธ ์ขํ๋ก ํ์ฌ ์์น๊ฐ ๋ฐ๋๋ค.
๋ธ๋ก(1~5)์ ๋ง๋ ๊ฒฝ์ฐ, ์ง๊ธ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ๋ ๋ธ๋ก์ ์ํ๋ฉด์ผ ๊ฒฝ์ฐ - ๋ฐฉํฅ์ด ๋ฐ๋๊ฐ ๋๊ณ ,
์ง๊ธ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ๋ ๋ธ๋ก์ ๊ฒฝ์ฌ๋ฉด์ผ ๊ฒฝ์ฐ - ๋ฐฉํฅ์ด ์ง๊ฐ ๋ฐฉํฅ์ผ๋ก ๋ฐ๋๋ค.(๋ฐ์ฌ๋๋ ๋ฐฉํฅ)
์์์ง์ ๋๋ ๋ธ๋ํ(-1)์ ๋ง๋ ๊ฒฝ์ฐ, ์ด๋์ ๋ฉ์ถ๊ณ ์ ์์ ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ค.
์ฃผ์ด์ง map์์ ์ป์ ์ ์๋ ์ต๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
* ์์์ง์ ์ ๋น ์นธ์ผ ๋๋ง ๊ฐ๋ฅํ๋ค.
2. ํ์ด
์๋ฎฌ๋ ์ด์ ๋ฌธ์ ์ด๋ค.
์ ๋ ฅ๋ฐ์ ๋, map์ ๊ฐ์ด 6 ์ด์์ผ ๊ฒฝ์ฐ ์ํ ๋ฐฐ์ด์ ์ขํ๋ฅผ ์ ์ฅํ์๋ค.
์ํ ๋ฐฐ์ด์ warm = new Pos[11][2] ๋ก ์ค์ ํ๋๋ฐ,
map์ ์ซ์๋ฅผ ์ํ์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๊ธฐ ์ํด 11,
๊ฐ์ ์ธ๋ฑ์ค๋ก ์ํ์ด 2๊ฐ๊ฐ ์กด์ฌํ๋ฏ๋ก 2 ๋ก ์ค์ ํ๊ณ ์์ํ๋ค.
๊ทธ๋ฆฌ๊ณ y, x ์ขํ๋ฅผ ์ ์ฅํ ๊ฒ์ด๋ฏ๋ก Pos ํด๋์ค๋ก ๋ฐฐ์ด์ ์์ฑํ์๋ค.
map์์ ๋ชจ๋ ๋น์นธ(0)์ ์์์ง์ ์ผ๋ก ์ค์ ํด๋ณด๊ณ ์ป์ ์ ์๋ ์ ์์ ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ ๋ฐฉ์์ด๋ค.
1. ๋ฒฝ์ ๋ถ๋ชํ ๋ (๊ฐ์ฅ ๋งจ ์์ ์์ผํจ -> ์ขํ ๋ฒ์ ๋๋ฌธ)
2. ์์์ , ๋ธ๋ํ์ผ ๋
3. ์ํ์ผ ๋
4. ๋น์นธ์ผ ๋
5. ๋ธ๋ก์ ๋ถ๋ชํ ๋
์กฐ๊ฑด์ ๋๋ ์ ๊ตฌํํ์๋ค.
๋ด๊ฐ ๋์น ๋ถ๋ถ์
1. ์๊พธ ๋ฌดํ๋ฃจํ๊ฐ ๋์๋ค. ์์ธ์ 2๊ฐ์ง์๋ค.
- ๋น์นธ์ผ ๋๋ฅผ ์๊ฐํด์ฃผ์ง ์์๋ค. map ๊ฐ์ด 0์ผ ๋์๋ ์๋ฌด ์ผ๋ ์ํํ์ง ์์ผ๋ ๊ณ์ ๋ฌดํ๋ฃจํ๊ฐ ๋์๋ค.
- ๋ธ๋ก์ ๋ถ๋ชํ ๋ ๋ฐฉํฅ ๋ฐ๊ฟ์ฃผ๋ ๋ถ๋ถ์์ ๋ฐฉํฅ์ ํ๋ ์๋ชป ๋ฐ๊ฟ์ฃผ๊ณ ์์๋ค. => ์ด๊ฒ ์ ์ผ ๊น๋ค๋ก์ ๋ค.. ์ ์ผ ์ค๋๊ฑธ๋ ธ์
(+)
ํ์ด1
๋ธ๋ก์ ๋ถ๋ชํ ๋, ๋ธ๋ก๋ง๋ค if๋ฌธ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์คฌ์๋ค.
if (map[ny][nx] >= 1 && map[ny][nx] <= 5) {
int idx = map[ny][nx];
if (idx == 1) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 3) d = 2;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 1) d = 3;
else if (d == 2) d = 0;
}
else if (idx == 2) {
//์ํ๋ฉด
if (d == 1) d = 0;
else if (d == 3) d = 2;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 0) d = 3;
else if (d == 2) d = 1;
}
else if (idx == 3) {
//์ํ๋ฉด
if (d == 1) d = 0;
else if (d == 2) d = 3;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 0) d = 2;
else if (d == 3) d = 1;
}
else if (idx == 4) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 2) d = 3;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 1) d = 2;
else if (d == 3) d = 0;
}
else if (idx == 5) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 1) d = 0;
else if (d == 2) d = 3;
else if (d == 3) d = 2;
}
score++;
continue;
}
ํ์ด2
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ์ด๋ดค๋๋ฐ, ํ์ฃผ๋ฒ ๊ฒ๊ฑฐ ํ ๋ ํ์ดํ ์ฐ๊ฒฐ ๋ฐฉํฅ ์๊ฐํด์ค ๋์ฒ๋ผ ํ์ด๋ดค๋ค.
ํ๋ณผ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๊ณ ์์์ผ๋ฉด, ๋ธ๋ก์ ์ผ์ชฝ์ ๋ถ๋ชํ๋ค. ์ฆ, ํ์ฌ ํ๋ณผ ๋ฐฉํฅ์ ๋ฐ๋ ๋ฐฉํฅ์ด ๋ธ๋ก์ ๋ถ๋ชํ๋ ๋ฐฉํฅ์ด๋ค.
์ด ์ ์ ์ด์ฉํด์ ๋ธ๋ก์ ๋ฐฉํฅ๋ง๋ค ์ํ๋ฉด์ด๋ฉด 1, ๊ฒฝ์ฌ๋ฉด์ด๋ฉด 0 ์ ์ ์ฅํด์ฃผ์๋ค.
์ํ๋ฉด์ ๋ง๋๋ฉด ํ๋ณผ์ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ฃผ๊ณ ,
๊ฒฝ์ฌ๋ฉด์ ๋ง๋๋ฉด ๋ธ๋ก์ ๊ฒฝ์ฌ๋ฉด์ธ ๋ ๋ค๋ฅธ ๋ฐฉํฅ์ด ํ๋ณผ์ ๋ฐฉํฅ์ด ๋๋ค.
// ๋ธ๋ก์ ๋ถ๋ชํ ๋
if (map[ny][nx] >= 1 && map[ny][nx] <= 5) {
int idx = map[ny][nx];
//๋ถ๋ชํ๋ ๋ธ๋ก์ ๋ฐฉํฅ
int bd = 0;
switch(d) { //ํ์ฌ๋ฐฉํฅ์ ๋ฐ๋๋ฐฉํฅ == ๋ถ๋ชํ๋ ๋ธ๋ก์ ๋ฐฉํฅ
case 0: bd=1; break;
case 1: bd=0; break;
case 2: bd=3; break;
case 3: bd=2; break;
}
if ( block[idx][bd]==1 ) { //์ํ์ด๋ฉด ๋ฐ๋๋ฐฉํฅ
d = bd;
} else if ( block[idx][bd]==0 ) { //์์ง์ด๋ฉด ์ง๊ฐ๋ฐฉํฅ
for (int i=0; i<4; i++) {
if ( bd!=i && block[idx][i]==0 ) {
d=i;
break;
}
}
}
score++;
continue;
}
3. ์ฝ๋
๋ธ๋ก์ ๋ถ๋ชํ ๋ - if๋ฌธ
package a22_10_20;
import java.io.*;
import java.util.*;
public class SW_5650_ํ๋ณผ๊ฒ์ {
static int[][] map;
static int N, ans;
static Pos[][] warm;
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++) {
N = Integer.parseInt(br.readLine());
map = new int[N][N];
warm = new Pos[11][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int num = Integer.parseInt(st.nextToken());
map[i][j] = num;
if (num >= 6) {
if (warm[ num ][0] == null) {
warm[num][0] = new Pos(i, j);
} else {
warm[num][1] = new Pos(i, j);
}
}
}
} // ์
๋ ฅ ๋
ans = 0;
solution();
System.out.println("#" + tc + " " + ans);
}
}
static void solution() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] != 0) continue;
for (int d = 0; d < 4; d++) {
move(i, j, d);
}
}
}
}
static void move(int sy, int sx, int d) {
int score = 0;
int ny = sy;
int nx = sx;
while (true) {
ny += dy[d];
nx += dx[d];
// ๋ฒฝ์ ๋ถ๋ชํ ๋
if (ny < 0 || nx < 0 || ny >= N || nx >= N) {
if (d == 0) d = 1;
else if (d == 1) d = 0;
else if (d == 2) d = 3;
else if (d == 3) d = 2;
score++;
continue;
}
// ์์์ ์ด๊ฑฐ๋, ๋ธ๋ํ์ผ ๋
if ((ny == sy && nx == sx) || map[ny][nx] == -1) {
ans = Math.max(score, ans);
break;
}
// ์ํ์ผ ๋
if (map[ny][nx] >= 6) {
int idx = map[ny][nx];
if (warm[idx][0].y == ny && warm[idx][0].x == nx) {
ny = warm[idx][1].y;
nx = warm[idx][1].x;
} else if (warm[idx][1].y == ny && warm[idx][1].x == nx){
ny = warm[idx][0].y;
nx = warm[idx][0].x;
}
continue;
}
//๋น์นธ์ด๋ฉด ์ญ ๊ฐ๋ค
if (map[ny][nx] == 0) continue;
// ๋ธ๋ก์ ๋ถ๋ชํ ๋
if (map[ny][nx] >= 1 && map[ny][nx] <= 5) {
int idx = map[ny][nx];
if (idx == 1) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 3) d = 2;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 1) d = 3;
else if (d == 2) d = 0;
}
else if (idx == 2) {
//์ํ๋ฉด
if (d == 1) d = 0;
else if (d == 3) d = 2;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 0) d = 3;
else if (d == 2) d = 1;
}
else if (idx == 3) {
//์ํ๋ฉด
if (d == 1) d = 0;
else if (d == 2) d = 3;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 0) d = 2;
else if (d == 3) d = 1;
}
else if (idx == 4) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 2) d = 3;
// ๊ฒฝ์ฌ๋ฉด
else if (d == 1) d = 2;
else if (d == 3) d = 0;
}
else if (idx == 5) {
//์ํ๋ฉด
if (d == 0) d = 1;
else if (d == 1) d = 0;
else if (d == 2) d = 3;
else if (d == 3) d = 2;
}
score++;
continue;
}
}
}
static class Pos {
int y, x;
Pos(int y, int x) {
this.y = y;
this.x = x;
}
}
}
๋ธ๋ก์ ๋ถ๋ชํ ๋ - ๋ธ๋ก 2์ฐจ์ ๋ฐฐ์ด
package a22_10_22;
import java.io.*;
import java.util.*;
public class SW_5650_ํ๋ณผ๊ฒ์ {
static int[][] map;
static int N, ans;
static Pos[][] warm;
static int[] dy = { -1, 1, 0, 0 };
static int[] dx = { 0, 0, -1, 1 };
static int[][] block = {
// ์ ํ ์ข ์ฐ - ์ํ:1, ์ง๊ฐ:0
{0,0,0,0}, //0 dummy
{0,1,1,0}, //1
{1,0,1,0}, //2
{1,0,0,1}, //3
{0,1,0,1}, //4
{1,1,1,1} //5
};
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++) {
N = Integer.parseInt(br.readLine());
map = new int[N][N];
warm = new Pos[11][2];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int num = Integer.parseInt(st.nextToken());
map[i][j] = num;
if (num >= 6) {
if (warm[ num ][0] == null) {
warm[num][0] = new Pos(i, j);
} else {
warm[num][1] = new Pos(i, j);
}
}
}
} // ์
๋ ฅ ๋
ans = 0;
solution();
System.out.println("#" + tc + " " + ans);
}
}
static void solution() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] != 0) continue;
for (int d = 0; d < 4; d++) {
move(i, j, d);
}
}
}
}
static void move(int sy, int sx, int d) {
int score = 0;
int ny = sy;
int nx = sx;
while (true) {
ny += dy[d];
nx += dx[d];
// ๋ฒฝ์ ๋ถ๋ชํ ๋
if (ny < 0 || nx < 0 || ny >= N || nx >= N) {
if (d == 0) d = 1;
else if (d == 1) d = 0;
else if (d == 2) d = 3;
else if (d == 3) d = 2;
score++;
continue;
}
// ์์์ ์ด๊ฑฐ๋, ๋ธ๋ํ์ผ ๋
if ((ny == sy && nx == sx) || map[ny][nx] == -1) {
ans = Math.max(score, ans);
break;
}
// ์ํ์ผ ๋
if (map[ny][nx] >= 6) {
int idx = map[ny][nx];
if (warm[idx][0].y == ny && warm[idx][0].x == nx) {
ny = warm[idx][1].y;
nx = warm[idx][1].x;
} else if (warm[idx][1].y == ny && warm[idx][1].x == nx){
ny = warm[idx][0].y;
nx = warm[idx][0].x;
}
continue;
}
//๋น์นธ์ด๋ฉด ์ญ ๊ฐ๋ค
if (map[ny][nx] == 0) continue;
// ๋ธ๋ก์ ๋ถ๋ชํ ๋
if (map[ny][nx] >= 1 && map[ny][nx] <= 5) {
int idx = map[ny][nx];
//๋ถ๋ชํ๋ ๋ธ๋ก์ ๋ฐฉํฅ
int bd = 0;
switch(d) { //ํ์ฌ๋ฐฉํฅ์ ๋ฐ๋๋ฐฉํฅ == ๋ถ๋ชํ๋ ๋ธ๋ก์ ๋ฐฉํฅ
case 0: bd=1; break;
case 1: bd=0; break;
case 2: bd=3; break;
case 3: bd=2; break;
}
if ( block[idx][bd]==1 ) { //์ํ์ด๋ฉด ๋ฐ๋๋ฐฉํฅ
d = bd;
} else if ( block[idx][bd]==0 ) { //์์ง์ด๋ฉด ์ง๊ฐ๋ฐฉํฅ
for (int i=0; i<4; i++) {
if ( bd!=i && block[idx][i]==0 ) {
d=i;
break;
}
}
}
score++;
continue;
}
}
}
static class Pos {
int y, x;
Pos(int y, int x) {
this.y = y;
this.x = x;
}
}
}
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 14510. ๋๋ฌด ๋์ด - Java (0) | 2022.10.26 |
---|---|
[SWEA] 2115. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฒ๊ฟ์ฑ์ทจ - Java (0) | 2022.10.24 |
[SWEA] 2112. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ณดํธ ํ๋ฆ - Java (0) | 2022.10.18 |
[SWEA] 2383. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ์ ์ฌ ์์ฌ์๊ฐ Java (0) | 2022.10.02 |
[SWEA] 5644. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฌด์ ์ถฉ์ Java (0) | 2022.10.01 |