[L4-Avg] Reverse Array

문제

  • 정수형 배열의 특정 구간을 뒤집는 함수 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는 변경하지 않는다고 가정)
  • 변수명
  • 복잡도
  • 테스트코드

댓글 남기기