기본이 제일 어렵다.
수학 기본기와 문자열 기본기가 제일 어렵다.
🍩 1. 배열 뒤집기

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
import java.util.*;
class Solution {
public double solution(int[] numbers) {
int total = 0;
double answer = 0;
for (int i = 0; i < numbers.length; i++) {
total += numbers[i];
}
answer = total / numbers.length;
return answer;
}
}
틀린 이유는 total을 int 형으로 선언했기 때문이다. total이 int, numbers.length도 int이므로 total / numbers.length는 정수 나눗셈이 되어 소수점 이하가 버려지는 문제가 발생한다. total을 double로 바꿔주니까 해결되었다.
참고
int / double 또는 double / int → 자동으로 double 결과
⭐ 정답코드
import java.util.*;
class Solution {
public double solution(int[] numbers) {
double total = 0;
double answer = 0;
for (int i = 0; i < numbers.length; i++) {
total += numbers[i];
}
answer = total / numbers.length;
return answer;
}
}
💸 2. 옷가게 할인받기

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
class Solution {
public int solution(int price) {
if (price >= 500000) return (price * 0.8);
else if (price >= 300000) return (price * 0.9);
else if (price >= 100000) return (price * 0.95);
}
}

컴파일 오류발생함
1) Java에서 price * 0.8처럼 int와 double 값을 곱하면 double 타입 결과가 나오지만, 메서드의 반환 타입이 int이므로 컴파일 에러가 발생한다. 이것을 해결하려면 명시적으로 정수형으로 변환해야 한다.
2) else가 없음
price가 100,000 미만일 때의 처리가 빠져 있어서 반환값이 없는 경우가 발생하기 때문에 나머지는 else를 추가해서 가격이 할인 대상이 아닐 경우 원래 가격을 반환해야 한다.
⭐ 정답코드
class Solution {
public int solution(int price) {
if (price >= 500000) return (int)(price * 0.8);
else if (price >= 300000) return (int)(price * 0.9);
else if (price >= 100000) return (int)(price * 0.95);
else return price;
}
}

🥤 3. 아이스 아메리카노

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
import java.util.*;
class Solution {
public int[] solution(int money) {
int[] answer = {};
answer[0] = money / 5500;
answer[1] = money - (5500 * answer[0]);
return answer;
}
}
🔥 매일 실수로 깜빡 하는 부분: 코드에서 배열을 선언할 때 크기가 지정되지 않으면 배열 공간에 값을 할당 할 때 ArrayIndexOutOfBoundsException이 발생한다.
⭐ 정답코드
import java.util.*;
class Solution {
public int[] solution(int money) {
int[] answer = new int[2];
answer[0] = money / 5500;
answer[1] = money - (5500 * answer[0]);
return answer;
}
}
⭐ 정답코드
👩🏻🦰 4. 나이 출력

⭐ 정답코드
import java.time.LocalDate;
class Solution {
public int solution(int age) {
return LocalDate.now().getYear() - age -3 + 1;
}
}
처음에는 아무 생각 없이 age + 1을 했는데 3년 차이가 나서 오답 처리가 됨
2022년 연도라고 했으니까 현재 연도 2025년과 3년 차이가 나는 것을 -3 해서 보정해 줌
👩🏻🦰 5. 배열 뒤집기

⭐ 정답코드
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
int n = num_list.length;
int[] answer = Arrays.copyOf(num_list, n); // 원본 배열 복사
for (int i = 0; i < n/2; i++) {
int tmp = answer[i]; // 현재 값 임시 변수에 저장
answer[i] = answer[n - 1 - i]; // 반대 값으로 교체
answer[n - 1 - i] = tmp; // 저장해 놓은 임시 값으로 교체
}
return answer;
}
}
나는 배열을 그대로 복사한 다음 배열 길이 절반까지 반복문을 돌려서 해당 값을 tmp변수에 넣어 준다음 반대 값으로 교체하는 방법으로 풀었다.
👏🏻 더 간단한 방법
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
List<Integer> list = new ArrayList<>();
for (int num : num_list) {
list.add(num);
}
Collections.reverse(list); // 리스트 뒤집기
return list.stream().mapToInt(i -> i).toArray(); // 배열로 변환하여 반환
}
}
Array 말고 ArrayList를 이용함녀 Collections.reverse()로 역순 변환이 가능하다.
다시 배열 형태로 반환해야 하므로 스트림으로 형변환 해야 한다.
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[num_list.length];
for (int i = 0; i < num_list.length; i++) {
answer[i] = num_list[num_list.length - 1 - i]; // 역순 복사
}
return answer;
}
}
이게 내가 구현 하려고 하던 방식이다. 처음에 새로운 빈 배열 answer[]을 선언한 다음, answer[] 배열의 앞에서부터 값을 채워나가면서 매개변수로 받은 num_list의 맨 뒤 요소부터 순차적으로 값을 넣는 코드이다.
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 외계행성의 나이 문제풀이 (6) | 2025.03.17 |
---|---|
[프로그래머스] (Java) 특정문자 제거하기 문제풀이 (4) | 2025.03.14 |
[프로그래머스] (Java) 피자 나눠 먹기 (1), (2), (3) (6) | 2025.03.10 |
[프로그래머스] (Java) 최빈값 구하기 (해시맵) (9) | 2025.03.06 |
[프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |
기본이 제일 어렵다.
수학 기본기와 문자열 기본기가 제일 어렵다.
🍩 1. 배열 뒤집기

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
import java.util.*; class Solution { public double solution(int[] numbers) { int total = 0; double answer = 0; for (int i = 0; i < numbers.length; i++) { total += numbers[i]; } answer = total / numbers.length; return answer; } }
틀린 이유는 total을 int 형으로 선언했기 때문이다. total이 int, numbers.length도 int이므로 total / numbers.length는 정수 나눗셈이 되어 소수점 이하가 버려지는 문제가 발생한다. total을 double로 바꿔주니까 해결되었다.
참고
int / double 또는 double / int → 자동으로 double 결과
⭐ 정답코드
import java.util.*; class Solution { public double solution(int[] numbers) { double total = 0; double answer = 0; for (int i = 0; i < numbers.length; i++) { total += numbers[i]; } answer = total / numbers.length; return answer; } }
💸 2. 옷가게 할인받기

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
class Solution { public int solution(int price) { if (price >= 500000) return (price * 0.8); else if (price >= 300000) return (price * 0.9); else if (price >= 100000) return (price * 0.95); } }

컴파일 오류발생함
1) Java에서 price * 0.8처럼 int와 double 값을 곱하면 double 타입 결과가 나오지만, 메서드의 반환 타입이 int이므로 컴파일 에러가 발생한다. 이것을 해결하려면 명시적으로 정수형으로 변환해야 한다.
2) else가 없음
price가 100,000 미만일 때의 처리가 빠져 있어서 반환값이 없는 경우가 발생하기 때문에 나머지는 else를 추가해서 가격이 할인 대상이 아닐 경우 원래 가격을 반환해야 한다.
⭐ 정답코드
class Solution { public int solution(int price) { if (price >= 500000) return (int)(price * 0.8); else if (price >= 300000) return (int)(price * 0.9); else if (price >= 100000) return (int)(price * 0.95); else return price; } }

🥤 3. 아이스 아메리카노

❌🙅🏻♀️ 첫번째 시도 - 틀린 코드
import java.util.*; class Solution { public int[] solution(int money) { int[] answer = {}; answer[0] = money / 5500; answer[1] = money - (5500 * answer[0]); return answer; } }
🔥 매일 실수로 깜빡 하는 부분: 코드에서 배열을 선언할 때 크기가 지정되지 않으면 배열 공간에 값을 할당 할 때 ArrayIndexOutOfBoundsException이 발생한다.
⭐ 정답코드
import java.util.*; class Solution { public int[] solution(int money) { int[] answer = new int[2]; answer[0] = money / 5500; answer[1] = money - (5500 * answer[0]); return answer; } }
⭐ 정답코드
👩🏻🦰 4. 나이 출력

⭐ 정답코드
import java.time.LocalDate; class Solution { public int solution(int age) { return LocalDate.now().getYear() - age -3 + 1; } }
처음에는 아무 생각 없이 age + 1을 했는데 3년 차이가 나서 오답 처리가 됨
2022년 연도라고 했으니까 현재 연도 2025년과 3년 차이가 나는 것을 -3 해서 보정해 줌
👩🏻🦰 5. 배열 뒤집기

⭐ 정답코드
import java.util.*; class Solution { public int[] solution(int[] num_list) { int n = num_list.length; int[] answer = Arrays.copyOf(num_list, n); // 원본 배열 복사 for (int i = 0; i < n/2; i++) { int tmp = answer[i]; // 현재 값 임시 변수에 저장 answer[i] = answer[n - 1 - i]; // 반대 값으로 교체 answer[n - 1 - i] = tmp; // 저장해 놓은 임시 값으로 교체 } return answer; } }
나는 배열을 그대로 복사한 다음 배열 길이 절반까지 반복문을 돌려서 해당 값을 tmp변수에 넣어 준다음 반대 값으로 교체하는 방법으로 풀었다.
👏🏻 더 간단한 방법
import java.util.*; class Solution { public int[] solution(int[] num_list) { List<Integer> list = new ArrayList<>(); for (int num : num_list) { list.add(num); } Collections.reverse(list); // 리스트 뒤집기 return list.stream().mapToInt(i -> i).toArray(); // 배열로 변환하여 반환 } }
Array 말고 ArrayList를 이용함녀 Collections.reverse()로 역순 변환이 가능하다.
다시 배열 형태로 반환해야 하므로 스트림으로 형변환 해야 한다.
import java.util.*; class Solution { public int[] solution(int[] num_list) { int[] answer = new int[num_list.length]; for (int i = 0; i < num_list.length; i++) { answer[i] = num_list[num_list.length - 1 - i]; // 역순 복사 } return answer; } }
이게 내가 구현 하려고 하던 방식이다. 처음에 새로운 빈 배열 answer[]을 선언한 다음, answer[] 배열의 앞에서부터 값을 채워나가면서 매개변수로 받은 num_list의 맨 뒤 요소부터 순차적으로 값을 넣는 코드이다.
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 외계행성의 나이 문제풀이 (6) | 2025.03.17 |
---|---|
[프로그래머스] (Java) 특정문자 제거하기 문제풀이 (4) | 2025.03.14 |
[프로그래머스] (Java) 피자 나눠 먹기 (1), (2), (3) (6) | 2025.03.10 |
[프로그래머스] (Java) 최빈값 구하기 (해시맵) (9) | 2025.03.06 |
[프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |