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();
}