문제
왜자꾸 중국어로 나오는건지 모르겠지만
암튼
입력받은 배열에 대해서 배열을 각 행마다, 각 열마다 정렬이 되면 YES, 안되면 NO를 출력하라는 것 같다
내 풀이
진짜 고민 많이 하고....
문자열 정렬하는거(Char배열로 만들어서 정렬)는 구글의 도움을 받았지만
그래도 한 80%는 스스로 풀어서 쫌 뿌듯하다 ㅠ
근데 일단 이건 틀렸다. 원래는 이렇게 풀었음
테스트코드 몇개는 통과하는데 몇개에서 틀림
public static String gridChallenge(List<String> grid) {
// 배열의 각 요소(문자열) 정렬
for(int i=0; i < grid.size(); i++) {
String str = grid.get(i); // "ebacd"
char[] cArr = str.toCharArray(); // [ebacd]
Arrays.sort(cArr); // [abcde]
str = new String(cArr); // "abcde"
}
// 각 열의 크기 정렬
for(int i=0; i < grid.size(); i++) {
for(int j=0; j < grid.size(); j++) {
if(!(grid.get(j).charAt(i) < grid.get(j + 1).charAt(i))) {
return "NO";
}
}
}
return "YES";
}
수정
+) grid에 다시 담는 것
+) 두번째 for문에서 각 열에서 루프를 돌때 grid 길이만큼이 아니라, 첫번째 행의 열의 길이만큼
+) 세번째 for문에서 grid.size() 까지 돌면, grid.get( j + 1 )( = j번째 행 + 1)을 할 때 grid.size()를 넘어가버림
+) 같은 열의 이전 행의 값이 더 작지 않을 때 ( ! < ) 이런식으로 했었던 걸 -> 더 크면 NO 반환 으로 수정
public static String gridChallenge(List<String> grid) {
// 배열의 각 요소(문자열) 정렬
for(int i=0; i < grid.size(); i++) {
String str = grid.get(i); // "ebacd"
char[] cArr = str.toCharArray(); // [ebacd]
Arrays.sort(cArr); // [abcde]
str = new String(cArr); // "abcde"
grid.set(i, str); // grid에 다시 담아줌
}
// 각 열의 크기 정렬
for(int i=0; i < grid.get(0).length(); i++) { // 첫 행의 열의 길이만큼
for(int j=0; j < grid.size() - 1; j++) {
if(grid.get(j).charAt(i) > grid.get(j + 1).charAt(i)) { // 같은 열의 이전 행의 값이 더 크면
return "NO";
}
}
}
return "YES";
}
다른 사람 풀이
아 아예 빈 문자열을 만들어놓고 그 문자열과 비교를 해도 되겠구만 ............
https://ifuwanna.tistory.com/465
[HackerLank] Grid Challenge - 문제풀이
Description 각 Row의 요소들을 정렬했을 경우 같은 행(Column)의 첫번째행부터 마지막행까지의 값도 오름차순으로 정렬되어있는지 여부를 반환하는 문제입니다. Solution 1. Sorting public static String gridChal
ifuwanna.tistory.com
'코딩테스트 > HackerRank' 카테고리의 다른 글
[HackerRank] Recursive Digit Sum 📌 (0) | 2023.04.07 |
---|---|
[HackerRank] Sherlock and Array 📌 (0) | 2023.04.07 |
[HackerRank] Max Min 📌 (0) | 2023.04.06 |
[HackerRank] Caesar Cipher 📌 (0) | 2023.04.06 |
[HackerRank] Sales by Match ✔📌 (0) | 2023.04.05 |