공원 산책
class Solution {
public int[] solution(String[] park, String[] routes) {
int x = 0;
int y = 0;
// 시작 위치 'S' 찾기
for(int i=0; i<park.length; i++) {
if(park[i].contains("S")) {
x = i;
y = park[i].indexOf("S");
break;
}
}
// 명령어 처리
for(String route : routes) {
String direction = route.split(" ")[0];
int step = Integer.parseInt(route.split(" ")[1]);
int nx = x; // 이동 중 x 좌표
int ny = y; // 이동 중 y 좌표
for(int i=0; i<step; i++) {
switch(direction) {
case "E":
ny++;
break;
case "W":
ny--;
break;
case "S":
nx++;
break;
case "N":
nx--;
break;
}
// 경계 검사
if(nx >= 0 && ny >= 0 && nx < park.length && ny < park[0].length()) {
// 장애물 검사
if(park[nx].charAt(ny) == 'X') {
break;
}
// 이동 완료 시 위치 갱신
if(i == step - 1) {
x = nx;
y = ny;
}
} else {
break; // 범위를 벗어나면 이동 취소
}
}
}
return new int[] {x, y};
}
}
시작 위치 찾기
: park 배열을 탐색해서 'S'의 위치를 찾아 x와 y의 초기값으로 설정함
명령어 처리 ex. "E 2"
: direction과 step을 분리해 이동 방향과 거리 설정함
이동 로직
: 각 방향(E, W, S, N)에 따라 좌표(nx, ny)를 업데이트함
경계 및 장애물 검사
: 이동 도중 경계 밖으로 나가거나 장애물('X')을 만나면 이동을 중단함
최종 위치 갱신
: 명령어의 모든 이동이 완료되었을 때 현재 위치를 갱신함
결과 반환
: return new int[] {x, y}
약수의 개수와 덧셈
약수의 개수가 짝수인지 홀수인지 구분하는 법
제곱수(1, 4, 9, 16, ...)는 약수의 개수가 홀수임
int sqrt = (int) Math.sqrt(i);
if(sqrt * sqrt == i) {
sum -= i;
}
3진법 뒤집기
10진수를 3진수로 변환하는 방법
// 10진수를 3진수로 변환
String three = Integer.toString(n, 3);
// 3진수 뒤집기
String reversed = new StringBuilder(three).reverse().toString();
// 뒤집은 3진수 10진수로 변환
int result = Integer.parseInt(reversed, 3);
String은 불변 객체이므로 reverse() 메서드 X
StringBuilder는 가변 객체로 reverse()를 이용해 문자열을 뒤집는 기능을 제공함
두 개 뽑아서 더하기
TreeSet을 int[]로 변환할 때 반복문을 사용해 직접 배열로 복사할 수 있음
int[] result = new int[sortedSet.size()];
int index = 0;
for(int num : sortedSet) {
result[index++] = num;
}
체육복
슬픔 PD like
알고보니
도난핑도 고려해야돼 허허,,
도와줄사람!!!!!!!!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv2] 전력망을 둘로 나누기 (1) | 2024.11.27 |
---|---|
11/24 오답노트 (3) | 2024.11.24 |
[프로그래머스 Lv2] JOIN(SQL) (0) | 2024.11.22 |
[프로그래머스 Lv1, Lv2] IS NULL(SQL) (1) | 2024.11.22 |
[프로그래머스 Lv2] GROUP BY(SQL) (1) | 2024.11.22 |