이번에는 챌린지 문제 중 어려웠던 문제를 다시 리뷰해보려고 한다.
28문제 중 4문제 밖에 풀지 못했는데, 생각보다 어려웠던 것 같다.
※ K번째 수 정렬
- 풀었으나 어려움
작성 코드
public static void main(String[] args) {
int[] array = {1, 5, 2, 6, 3, 7, 4};
int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
int s = 2;
int j = 5;
int k = 3;
System.out.println(Arrays.toString(solution(array, commands))); }
public static int[] solution(int[] array, int[][] commands) {
// 배열 자르기 / 정렬 / n번째 수 구하기
int[] a = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
int x = commands[i][0];
int y = commands[i][1];
int z = commands[i][2];
int[] arr = new int[y - x];
int[] array1 = Arrays.copyOfRange(array, x - 1, y);
Arrays.sort(array1);
a[i] = array1[z - 1];
}
return a;
}
}
코드 리뷰
1. x는 잘라낼 시작 위치, y는 끝 위치, z는 찾을 숫자의 위치
2. int[] array1 = Arrays.copyOfRange(array, x - 1, y); : 배열에서 지정된 범위에 해당하는 부분을 복사해서 array1에 저장 (인덱스는 0부터 시작하니까 x에서 1을 뺴줘야함)
3. Arrays.sort로 배열을 새로 정렬해줌
4. 정렬된 배열에서 찾을 숫자의 위치에 해당하는 값을 배열 a에 저장
※ 가장 가까운 같은 글자
작성 코드
public static void main(String[] args) {
String s = "banana";
//char[] a = s.toCharArray();
int[] answer = new int[s.length()];
// ArrayList<Integer> z = new ArrayList<Integer>();
for (int i = 0; i < s.length(); i++) {
for (int j = i; j >= 0; j--) {
if (s.charAt(i) == s.charAt(j) && answer[i] == 0) {
answer[i] = i - j;
}
}
if (answer[i] == 0) {
answer[i] = -1;
}
}
//System.out.println(answer);
System.out.println(Arrays.toString(answer));
}
}
이 코드는 두 번째 반복문과 조건문을 어떻게 해야 할 지 잘 떠오르지 않아서 어려웠던 것 같다.
코드 리뷰
1. 결과값을 저장할 배열을 초기화 해줌 (각 문자까지의 거리를 저장함)
2. 첫 번째 for문 : 문자열을 돌면서 문자까지의 거리를 계산
3. 두 번째 for문
- 현재 문자 인덱스 i 부터 문자열 시작 부분(인덱스 0)까지 역방향으로 반복
- 루프 내에 현재 인덱스는 인덱스 j 에 있는 문자와 동일하며 현재 문자의 거리가 아직 계산되지 않는 경우
- 조건이 충족되면 i와(현재문자) 동일한 문자가 가장 가까운 이전 문자(j)사이 거리를 계산 (j는 뒤로 이동 하니까 i-j)
'항해99' 카테고리의 다른 글
[항해99] Spring 입문주차 1주차 과제 (0) | 2024.02.22 |
---|---|
[항해99] WIL 24.02.17 (1) | 2024.02.17 |
[항해99] 3주차 프로그래머스 알고리즘 연습하기 (1) | 2024.02.17 |
[항해99] WIL 24.02.11 (0) | 2024.02.11 |
[항해99] 자바 문법 종합반 2주차 ( 02.06 ~ 02.07 ) (1) | 2024.02.07 |