주어진 그리드의 열이 사전순 정렬이면 YES를 출력하는 문제로 그리드의 행은 순서를 변경할 수 있다. Given a square grid of characters in the range ascii[a-z], rearrange elements of each row alphabetically, ascending. Determine if the columns are also in ascending alphabetical order, top to bottom. Return YES if they are or NO if they are not.
입출력예시1
1 2 3 4 5
//입력 ["abc", "ade", "efg"]
//출력 YES
코드
행을 사전순으로 정렬하는 것은 쉬웠지만 열이 사전순 정렬인지 확인하는 부분이 어려웠다.
1 2 3 4 5 6 7 8 9
(생략) for (int i = 0; i < grid[0].length(); i++) { for (int j = 0; j < grid.length - 1; j++) { if (grid[j].charAt(i) > grid[j + 1].charAt(i)) { return"NO"; } } } (후략)
위의 부분에서 입출력예시를 가지고 설명한다면, grid[j].charAt(i) > grid[j + 1].charAt(i)이 부분은 먼저 grid[0].charAt(1) > grid[1].charAt(1) 을 비교한다. 둘다 a 이기때문에 사전순을 만족한다. 이 부분을 반복하면 아래와 같다.
static String gridChallenge(String[] grid){ // 1. 행을 사전순 정렬하기 // String을 char로 변환하여 사전순으로 sort한 후 다시 grid[i]번째에 넣는다. for (int i = 0; i < grid.length; i++) { char[] chars = grid[i].toCharArray(); Arrays.sort(chars); grid[i] = String.valueOf(chars); }
// 2. 열이 사전순 정렬인지 확인하기 // 지금 열과 다음 열의 i번째를 비교하여 사전순이 아니면 NO를 출력 for (int i = 0; i < grid[0].length(); i++) { for (int j = 0; j < grid.length - 1; j++) { if (grid[j].charAt(i) > grid[j + 1].charAt(i)) { return"NO"; } } }