CODING TEST/programmers

Day6 - 마지막 두 원소

iamyuunzo 2025. 7. 14. 21:02

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 마지막 두 원소

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181927

 

 

📌 문제 요약

핵심 조건: 각 수를 a, b 입력받아 출력하는 코드 작성

- 제한: - 100,000  a, b ≤ 100,000

 

 

📌 내 풀이 및 코드

class Solution {
    public int[] solution(int[] num_list) {      
        int[] answer = new int[num_list.length + 1];
        int a = num_list[num_list.length-1];
        int b = num_list[num_list.length-2];
        
        for (int i=0; i<num_list.length; i++) {
            answer[i] = num_list[i];
            
            if (a > b) {
                answer[answer.length - 1] = a - b;
            } else {
                answer[answer.length - 1] = a * 2;
            }
        }
        return answer;
    }
}

- 문제 자체는 이해했음. 근데 배열 문제 처음 풀어서 헷갈렸음..

- 조건문이 for 루프 안에 있어 반복할 필요가 없는 연산이 불필요하게 여러 번 실행됨.

- a > b의 결과는 한 번만 판단해도 되는데, num_list.length 만큼 반복함.

- if문을 answer[answer.length - 1] = a > b ? a - b : a * 2; 로 바꿔도 됨.

 

 

 

 

📌 다른 사람들 풀이

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length+1];

        for(int i=0; i<num_list.length; i++){
            answer[i] = num_list[i];
        }

        answer[num_list.length] = num_list[num_list.length-1] > num_list[num_list.length-2] ? num_list[num_list.length-1]-num_list[num_list.length-2]:num_list[num_list.length-1]*2;
        return answer;
    }
}

<-- 다른 풀이 요약 -->

- 1 : 조건 비교가 딱 한 번만 실행되어서 효율적임.

항목  내 코드  1번 코드
조건 실행 위치 for문 안에서 반복 실행됨 for문 밖에서 한 번만 실행됨
성능 불필요한 연산이 많아 비효율적 효율적 (필요한 연산만 수행)
가독성 조건이 반복되어 가독성이 떨어짐 간결하고 이해하기 쉬움
코드 길이 더 김 더 짧고 명확함



 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** Java 배열 **

- 3 : new int[] {...}는 배열 리터럴을 함수의 인자로 바로 전달할 때 주로 사용

- 5 : length는 속성이고, 괄호 없음. (String.length는 메서드지만 array.length는 필드)

// 1. 배열 선언 (Declaration)
int[] numbers;					// int형 배열 선언 (추천 방식)
int numbers[];					// 이렇게도 가능하나 C언어 스타일임.


// 2. 배열 생성 (Instantiation)
numbers = new int[5];			// 길이가 5인 배열 생성, 기본값은 0


// 3. 배열 선언 + 생성 + 초기화 (Initialization)
int[] numbers = {1, 2, 3, 4, 5};				// 선언 + 생성 + 초기화 (정적)
int[] numbers = new int[]{1, 2, 3, 4, 5};		// new 연산자 사용


// 4. 배열 값 접근 (Access)
int x = numbers[0];								// 1번째 요소 접근 (인덱스 0부터 시작)
numbers[2] = 10;								// 3번째 요소 값 변경


// 5. 배열 길이 (Length)
int len = numbers.length;						// 배열 길이 얻기
System.out.println(len);						// 출력 : 5


// 6. 배열 반복 (Loop through an array)
int[] nums = {1, 2, 3, 4, 5};

for (int i = 0; i < nums.length; i++) {			// for (int num : nums)로 바꿀 수 있음.
	System.out.println(nums[i]);
}


// 7. 다차원 배열 (2, 3차원 배열 ...)
int[][] matrix = {
	{1, 2, 3},
    {4, 5, 6}
};

int val = matrix[1][2];							// 2행 3열의 값 : 6

for (int i = 0; i < matrix.length; i++) {		// 출력
	for (int j = 0; j < matrix.length; j++) {
    	System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}