문제
- 정수형 배열의 특정 구간을 뒤집는 함수 reverse(array, start, end)를 작성하세요.
- 예제
int[] array = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(array)); // [1, 2, 3, 4, 5] reverse(array, 1, 4);
System.out.println(Arrays.toString(array)); // [1, 5, 6, 7, 2]
풀이
import java.util.Arrays;
public class ReverseArray {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
print(array);
// reverse(array, 1, 4);
// reverse(array, 2, 3);
reverse(array, 4, 1);
print(array); // 검증을 제대로 하는지 확인 필요
}
private static void print(int[] array) {
System.out.println(Arrays.toString(array));
}
// 메소드명, 파라메터명이 적절한지 확인
private static void reverse(int[] array, int start, int end) {
// 입력값에 대한 검증을 잘 하는지 확인
// if not validate --> print log & not excute
if (!validateCondition(array, start, end)) {
System.out.println("입력값에 오류가 있습니다.");
return;
}
int temp;
while (start < end) {
System.out.println("\nstart: " + start);
System.out.println("end: " + end);
temp = array[start];
array[start] = array[end];
array[end] = temp;
start++;
end--;
}
// for (int i = start; i < end; i++) {
// temp = array[i];
// array[i] = array[end];
// array[end] = temp;
// end--;
// }
}
// 메소드명이 부정형으로 사용된다면 이유를 물어볼것
private static boolean validateCondition(int[] array, int start, int end) {
if (start > end) {
System.out.println("start가 end보다 큽니다.");
return false;
}
return true;
// 테크 인터뷰 시간관계상 설명만 진행하도록 유도
// array is not null
// array is not empty
// start <= end
// array.length <= end
// start > 0
// end > 0
}
}
체크포인트
- 요구사항을 명확하게 정리하고 확인하는지
- 알고리즘을 생각 후 작성하는지
- 읽기 쉬운 코드로 작성하는지
- validate 메소드 : 예외처리를 잘하는지
- 오류시 어떻게 처리할지 정의하고 개발하는지 (예를 들어 로그를 찍고 array는 변경하지 않는다고 가정)
- 변수명
- 복잡도
- 테스트코드