๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/49994
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์์ฝ
๋ช ๋ น์ด ๋ฆฌ์คํธ dirs๊ฐ ์ฃผ์ด์ก์ ๋, ์บ๋ฆญํฐ๊ฐ ์ง๋๊ฐ ๊ธธ ์ค ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๊ธฐ
์ด๋ ๋ช ๋ น์ด 4๊ฐ์ง U, D, R, L(์, ์๋, ์ค, ์ผ)๊ฐ ์๋ค.
์ฆ, ์ด์ ์ ์๋ ๊ธธ์ ์นด์ดํธํ์ง ์์๋ ๋๋ค.
์ ํ
- dirs๋ stringํ์ผ๋ก ์ฃผ์ด์ง๋ฉฐ, 'U', 'D', 'R', 'L' ์ด์ธ์ ๋ฌธ์๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- dirs์ ๊ธธ์ด๋ 500 ์ดํ์ ์์ฐ์์ ๋๋ค.
ํ์ด
dirs ๊ธธ์ด๊ฐ 500 ์ดํ์ด๊ณ , ์ขํํ๋ฉด์ ํฌ๊ธฐ๋ 10*10์ผ๋ก ๊ณ ์ ์ ๋๋ค.
๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ํฌ๊ฒ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ํ๋ฆ๋๋ก ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
- dirs ์ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์ํํ๋ฉด์ ์๋ ๊ธธ์ ์ฒดํฌํ๋ค.
- ๋ง์ฝ, ์ด์ ์ ์๋ ๊ธธ์ด๋ฉด ์ฒดํฌํ์ง ์๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ์นด์ดํธํ ๊ฐ์ ๋ฐํํ๋ค.
์๋ ๊ธธ์ ์ฒดํฌํ๊ธฐ ์ํด์๋ ์ด๋ค ํํ์ ๋ฐฐ์ด์ด ํ์ํ ๊น์?
ํ์ฌ ์ขํ์์ ์ด๋ํ ์ ์๋ ์ ํ์ง๋ ์์ชฝ, ์๋์ชฝ, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ 4๊ฐ์ง์ ๋๋ค.
์ฆ, ์๋ ๊ธธ์ธ์ง ์๋ณํ๊ธฐ ์ํด ํ์ํ ๊ฐ์ <์ด์ x์ขํ, ์ด์ y์ขํ, ๋ฐฉํฅ>์ ๋๋ค.
๋ฐ๋ผ์ ํฌ๊ธฐ๊ฐ 11*11*4์ธ 3์ฐจ์ ๋ฐฐ์ด๋ก visit ์ฌ๋ถ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
๊ตฌํํ ๋ ์ฃผ์ํ ์ ์ด ๋ช ๊ฐ์ง ์์ต๋๋ค. ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์กฐ๊ฑด๋ฌธ์ ์ ์ค์ ํด์ผ ํฉ๋๋ค.
- ์ธ๋ฑ์ค์๋ ์์๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ๋ผ์ ์ฃผ์ด์ง ์ขํํ๋ฉด๊ณผ ๋ค๋ฅด๊ฒ ์ผ์ชฝ ๋งจ ์๋ฅผ 0,0์ด๋ผ๊ณ ์๊ฐํ๊ณ ํ์ํด์ผ ํฉ๋๋ค.
- ์ด๋ค ๋ฌธ์ ๋ ์ขํํ๋ฉด, ์์น ์ด๋ ๊ด๋ จ์ผ ๋ ํญ์ ๊ฒฝ๊ณ๊ฐ์ ๋ฒ์ด๋์ง ์์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ์๋ฐฉํฅ์
๋๋ค.
- ๋๊ฐ์ ๊ธธ์ ์๋ก ์ด๋ํ๋ค๋ฉด ๋ค์ ์๋๋ก๋ ์ด๋ ๋ชปํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ๋ ๋ค ํ์ํด์ค์ผ ํฉ๋๋ค.
- ์ ๋ ๋ ๋ค ํ์ํ๊ธฐ ๊ท์ฐฎ์์ ๊ทธ๋ฅ ํ๋๋ก ํต์ผํ์ต๋๋ค. ์-์๋๋ ๋ฌด์กฐ๊ฑด ์์ ์๋ ์ขํ ๊ธฐ์ค์ผ๋ก, ์ผ-์ค๋ ๋ฌด์กฐ๊ฑด ์ค๋ฅธ์ชฝ์ ์๋ ์ขํ ๊ธฐ์ค์ผ๋ก ํ์ํ๊ฒ ํ์ต๋๋ค.
์ฝ๋
import java.util.*;
class Solution {
public int solution(String dirs) {
boolean[][][] visited = new boolean[11][11][2];
int curX=5, curY=5, cnt=0;
for(int i=0; i<dirs.length(); i++){
if(dirs.charAt(i)=='U' && curX-1>=0){
if(!visited[curX][curY][0]){
visited[curX][curY][0]=true;
cnt++;
}
curX--;
} else if(dirs.charAt(i)=='D' && curX+1<=10){
if(!visited[curX+1][curY][0]){
visited[curX+1][curY][0] = true;
cnt++;
}
curX++;
} else if(dirs.charAt(i)=='R' && curY+1<=10){
if(!visited[curX][curY+1][1]){
visited[curX][curY+1][1] = true;
cnt++;
}
curY++;
} else if(dirs.charAt(i)=='L' && curY-1>=0){
if(!visited[curX][curY][1]){
visited[curX][curY][1]=true;
cnt++;
}
curY--;
}
}
return cnt;
}
}
๐ท ์๊ฐ ๋ณต์ก๋
- N: dirs ๊ธธ์ด
- for๋ฌธ: O(N)
- ์ ์ฒด ์๊ฐ ๋ณต์ก๋: O(N)
๐ท ์ค๋ช
- `visited`์ ์ฒซ ์ธ๋ฑ์ค๋ X ์ขํ, ๋ ๋ฒ์งธ ์ธ๋ฑ์ค๋ Y์ขํ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ธ ๋ฒ์งธ ์ธ๋ฑ์ค๋ ๋ ๊ฐ์ง ๊ฐ์ผ๋ก 0์ด๋ฉด ์-์๋ ํ์, 1์ด๋ฉด ์ผ-์ค ํ์์ ๋๋ค.
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ธธ์ ์นด์ดํธ๋ฅผ ํ์ง๋ ์์ง๋ง ์ขํ ์ด๋์ ํด์ค์ผ ํฉ๋๋ค.
- ์ฒ์์ ๋ฐฉ๋ฌธํ ๊ธธ์ด๋ฉด ๋ฌด์กฐ๊ฑด ํจ์คํ๊ฒ ๊ตฌํํ๋ค๊ฐ ์คํจํ์ต๋๋ค ๐
'๐ช Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค] ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ (JAVA) (1) | 2025.02.04 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] ๊ดํธ ํ์ ํ๊ธฐ (JAVA) (2) | 2025.02.04 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ์คํจ์จ (JAVA) (1) | 2025.02.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ ฌ์ ๊ณฑ์ (JAVA) (1) | 2025.02.01 |