Mini
[구현] 프로그래머스 방문길이 // set 본문
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
* 풀이
좌표를 (0,0)으로 변경
set에 from, to를 정렬후 넣기 (좌->우, 위->아래 순서)
set.size가 정답일것
import java.util.*;
class Pos{
int y, x;
Pos(int y, int x){
this.y=y;
this.x=x;
}
}
class Solution {
static void print(Object o){
System.out.println(o);
}
public int solution(String dirs) {
int answer = 0;
int[][] arr = new int[11][11];
// print(Arrays.deepToString(arr));
Set<String> s = new HashSet<>();
Pos cur = new Pos(5,5);
for(int i=0;i<dirs.length();++i){
var a = dirs.charAt(i);
if(a=='U'){
int nx = cur.x;
int ny=cur.y-1;
if(nx<0 || ny<0 || nx>=11 || ny>=11) continue;
var sb = new StringBuilder();
sb.append(ny);
sb.append(nx);
sb.append(cur.y);
sb.append(cur.x);
s.add(sb.toString());
cur = new Pos(ny,nx);
}
else if(a=='D'){
int nx = cur.x;
int ny=cur.y+1;
if(nx<0 || ny<0 || nx>=11 || ny>=11) continue;
var sb = new StringBuilder();
sb.append(cur.y);
sb.append(cur.x);
sb.append(ny);
sb.append(nx);
s.add(sb.toString());
cur = new Pos(ny,nx);
}
else if(a=='L'){
int nx = cur.x-1;
int ny=cur.y;
if(nx<0 || ny<0 || nx>=11 || ny>=11) continue;
var sb = new StringBuilder();
sb.append(ny);
sb.append(nx);
sb.append(cur.y);
sb.append(cur.x);
s.add(sb.toString());
cur = new Pos(ny,nx);
}
else if(a=='R'){
int nx = cur.x+1;
int ny=cur.y;
if(nx<0 || ny<0 || nx>=11 || ny>=11) continue;
var sb = new StringBuilder();
sb.append(cur.y);
sb.append(cur.x);
sb.append(ny);
sb.append(nx);
s.add(sb.toString());
cur = new Pos(ny,nx);
}
}
return s.size();
}
}
* 개선
사실 정렬할필요없이 <from,to> <to,from>을 모두 넣고 size/2 하면 코드가 더 간단해진다.
'Algorithm > 구현' 카테고리의 다른 글
[세모] 프로그래머스 가장많이 받은 선물 // 구현, 해시맵, 문자열을 인덱스로 (0) | 2025.05.11 |
---|---|
[틀림] 백준 16235 나무제테크 // 구현, 배열에 여러정보필요한경우, 삭제보다는 새로할당 (0) | 2025.03.18 |
[세모] 백준 1269 대칭차집합 // 카운팅스타? 맵또는 배열 (0) | 2025.03.08 |
[틀림] [알고리즘] 백준 15685 드래곤 커브 // 구현, 기하문제는 규칙을 찾아라 (0) | 2025.02.16 |
[알고리즘] 백준 14891 톱니바퀴 // 구현, 배열회전 (0) | 2025.02.13 |