💡풀이 아이디어
".........."
".....#...."
"......##.."
"...##....."
"....#....."
위에서 부터 #이 있으면 멈추기 : up = y축 1번
밑에서 부터 #이 있으면 멈추고 1 더하기 : down = y축 4+1 번
전체분기하여 가장 왼쪽과 오른쪽에 나타나는 # 위치 찾기 : left = x축 3번 / right = x축 7+1번
각각을 조합하면 -> (up,left,down,right) = (1,3,5,8)
💡풀이 1
class Solution {
public int[] solution(String[] wallpaper) {
int up = 0, down = 0;
// 위에서 부터 #이 있으면 멈추기
for(int i = 0; i < wallpaper.length; i++) {
if(wallpaper[i].contains("#")) {
up = i;
break;
}
}
// 밑에서 부터 #이 있으면 멈추고 1 더하기
for(int i = wallpaper.length - 1; i >= 0; i--) {
if(wallpaper[i].contains("#")) {
down = i + 1; // 좌표를 맞추기 위해 +1
break;
}
}
// 전체분기하여 가장 왼쪽과 오른쪽에 나타나는 # 위치 찾기
int left = Integer.MAX_VALUE;
int right = Integer.MIN_VALUE;
for(int i = 0; i < wallpaper.length; i++) {
int p1 = wallpaper[i].indexOf("#");
int p2 = wallpaper[i].lastIndexOf("#");
left = (p1 == -1) ? left : Math.min(left, p1);
right = (p2 == -1) ? right : Math.max(right, ++p2); // p2는 좌표를 맞추기 위해 +1
}
return new int[]{up, left, down, right};
}
}
💡풀이 2
- 반복문으로 한번에 처리
class Solution {
public int[] solution(String[] wallpaper) {
int up = Integer.MAX_VALUE,
down = Integer.MIN_VALUE,
left = Integer.MAX_VALUE,
right = Integer.MIN_VALUE;
for(int y = 0; y < wallpaper.length; y++) {
for(int x = 0; x < wallpaper[0].length(); x++) {
if(wallpaper[y].charAt(x) == '#') {
up = Math.min(up, y);
down = Math.max(down, y + 1);
left = Math.min(left, x);
right = Math.max(right, x + 1);
}
}
}
return new int[]{up, left, down, right};
}
}
GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.
프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스, Java] 유연근무제 (0) | 2025.07.29 |
---|---|
[프로그래머스, Java] 개인정보 수집 유효기간 (0) | 2025.07.29 |
[프로그래머스, Java] 신규 아이디 추천 (0) | 2025.07.29 |
[프로그래머스, Java] 성격 유형 검사하기 (0) | 2025.07.21 |
[프로그래머스, Java][카카오 인턴] 키패드 누르기 (0) | 2025.07.21 |