검색 안하고 혼자 열심히 풀었는데 대부분 Math함수 썼네...^^;
문제
내 코드
class Solution {
public int[] solution(String[] wallpaper) {
int[] answer = new int[4];
int lengY = wallpaper.length;
int lengX = wallpaper[0].length();
char[][] wallpaperArr = new char[lengY+1][lengX+1];
//2차원 배열 함수에 담기
for(int cntY = 0; cntY < lengY; cntY++) {
char[] tmp = wallpaper[cntY].toCharArray();
for(int cntX = 0; cntX < lengX; cntX++) {
wallpaperArr[cntY][cntX] = tmp[cntX];
}
}
int lux = -1;
int luy = -1;
int rdx = -1;
int rdy = -1;
for(int i = 0; i < lengY; i++) {
for(int j = 0; j < lengX; j++) {
if(wallpaperArr[i][j] == '#') {
//끝점 구하기
if(luy == -1 || luy > i)
luy = i;
else
rdy = i;
//시작점 구하기
if(lux == -1 || j < lux)
lux = j;
else if(lux != -1 && j > lux) {
if(rdx != -1) {
if(rdx < j){
rdx = j;
}
} else {
rdx = j;
}
}
}
}
}
if(rdy == -1) rdy = luy;
if(rdx == -1) rdx = lux;
answer[0] = luy;
answer[1] = lux;
answer[2] = rdy+1;
answer[3] = rdx+1;
return answer;
}
}
사실 Math 함수를 쓰던 안쓰던 풀이하는 방식은 비슷하다. 최소값 최대값 찾기로 생각하면 된다.
나 같은 경우는 먼저 모든 문자를 2차원 배열에 char[][]에 담았다.
그리고 배열을 이중포문을 돌려 '#' 즉, 파일이 있는 자리를 찾아낸다.
끝점은 간단하다. 가장 처음 나온 자리를 luy에 저장해주고 '#' 나온 마지막 자리를 저장해준다. 여기서 파일이 하나일 경우를 생각해 rdy가 초기값 '-1' 이면 한 칸을 선택하기 위해 luy와 같은 값을 넣어준다.
시작점은 좀 더 복잡한데, 같은 방식으로 굴러가지만 문제는 x의 최소값이 처음 값보다 작아질 수 있다는 것이다.
["..........", ".....#....", "......##..", "...##.....", "....#....."] 의 경우
".........."
".....#...." 5번째
"......##.." 6,7번째
"...##....." 3,4번째
"....#....." 4번째
처음엔 lux에 5가 들어가지만 최소값은 3이다. 이런 경우를 생각해 lux가 현재 값보다 크면 lux를 바꿔주어야 한다. 최대값 rdx 또한 현재 값보다 작으면 바꿔주면 된다. 파일이 하나일 경우를 생각해 rdx도 초기값일 경우 lux 값으로 바꿔준다.
다른 사람 코드
class Solution {
public int[] solution(String[] wallpaper) {
int minX = wallpaper.length, minY = wallpaper[0].length(), maxX = 0, maxY = 0;
for (int i = 0; i < wallpaper.length; i++) {
for (int j = 0; j < wallpaper[i].length(); j++) {
if (wallpaper[i].charAt(j) == '#') {
minX = Math.min(i, minX);
minY = Math.min(j, minY);
maxX = Math.max(i, maxX);
maxY = Math.max(j, maxY);
}
}
}
return new int[] {minX, minY, maxX + 1, maxY + 1};
}
}
나처럼 함수를 사용하지 않은 사람도 은근 많았는데 함수를 사용한 사람껄로 가져와봤다.
Math 함수를 사용해 간단하게 최소값, 최대값을 구했다. charAt() 함수를 써서 문자열을 배열로 간단히 만든 것도 좋았다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Java]Lv.1 제일 작은 수 제거하기 (0) | 2023.04.18 |
---|---|
[프로그래머스/Java]Lv.1 핸드폰 번호 가리기 (0) | 2022.10.17 |
[프로그래머스/Java]Lv.1 서울에서 김서방 찾기 (0) | 2022.09.29 |
[프로그래머스/Java] LV.1 두 정수 사이의 합 (0) | 2022.09.22 |
[프로그래머스/Java] Lv.1 콜라츠 추측 (1) | 2022.09.22 |