모든 문제를 기록하는 게 비효율적인 것 같아서 방식을 바꿔보았습니다 ! ₍ᐢ⑅• ̫•⑅ᐢ₎ദ⸒⸒
배열 두배 만들기
📋 문제 설명
정수 배열 numbers
가 매개변수로 주어집니다. numbers
의 각 원소에 두배한 원소를 가진 배열을 return 하도록 solution 함수를 완성해주세요.
📌 제한사항
-10,000 ≤ numbers
의 원소 ≤ 10,000
1 ≤ numbers
의 길이 ≤ 1,000
class Solution {
public int[] solution(int[] numbers) {
int n = numbers.length;
int[] doubled = new int[n];
for (int i = 0; i < n; i++) {
doubled[i] = numbers[i] * 2;
}
return doubled;
}
}
// 다른 풀이: 스트림 사용
class Solution {
public int[] solution(int[] numbers) {
return Arrays.stream(numbers)
.map(x -> x * 2)
.toArray();
}
}
✍🏻 Stream
스트림이란? 데이터를 하나씩 꺼내면서(흐르게 하면서) 필터링, 변환, 정렬, 합치기 같은 작업을 "연결해서" 처리할 수 있게 해주는 도구
// filter + map + toArray
int[] arr = {2, 2, 1, 3, 5};
int[] result = Arrays.stream(arr)
.filter(x -> x % 2 == 1) // 홀수 고르기
.map(x -> x * 2) // 2배 만들기
.toArray(); // 배열로 변환
System.out.println(Arrays.toString(result)); // [2, 6, 10]
// filter + map + collect(Collectors.toList())
List<String> list = Arrays.asList("Apple", "Banana", "Cat", "Dog", "Elephant");
List<String> result = list.stream()
.filter(word -> word.length() >= 5) // 문자열 길이 5 이상
.map(String::toLowerCase) // 소문자 변환
.collect(Collectors.toList()); // 리스트로 변환
System.out.println(result); // [apple, banana, elephant]
// distinct + sorted + forEach
int[] arr = {2, 2, 1, 3, 5};
Arrays.stream(arr)
.distinct() // 중복 제거
.sorted() // 오름차순 정렬
.forEach(System.out::println); // 하나씩 출력
// count
int[] arr = {2, 2, 1, 3, 5};
long count = Arrays.stream(arr)
.filter(x -> x > 2) // 2보다 큰 수
.count(); // 개수 세기
System.out.println(count); // 2
옷가게 할인 받기
📋 문제 설명
머쓱이네 옷가게는 10만원 이상 사면 5%, 30만원 이상 사면 10%, 50만원 이상 사면 20%를 할인해줍니다. 구매한 옷의 가격 price
가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.
📌 제한사항
-10 ≤ price
≤ 1,000,000
price
는 10원 단위로(1의 자리가 0) 주어집니다.
소수점 이하를 버린 정수를 return 합니다.
class Solution {
public int solution(int price) {
if (price >= 500_000) {
return price * 80 / 100;
} else if (price >= 300_000) {
return price * 90 / 100;
} else if (price >= 100_000) {
return price * 95 / 100;
} else {
return price;
}
}
}
✏️ (int)
캐스팅 안 하고 정수끼리 계산으로 소수점 이하 버리기
뒤집힌 문자열
📋 문제 설명
문자열 my_string
이 매개변수로 주어집니다. my_string
을 거꾸로 뒤집은 문자열을 return 하도록 solution 함수를 완성해주세요.
📌 제한사항
1 ≤ my_string
의 길이 ≤ 1,000
class Solution {
public String solution(String my_string) {
return new StringBuilder(my_string).reverse().toString();
}
}
✍🏻 StringBuilder
StringBuilder sb = new StringBuilder("Hello");
// 문자열 끝에 붙이기
sb.append(" World"); // "Hello World"
// 원하는 위치에 끼워넣기
sb.insert(5, ","); // "Hello, World"
// 문자 하나 바꾸기
sb.setCharAt(0, 'h'); // "hello, world"
// 특정 범위 삭제
sb.delete(5, 7); // "helloWorld"
// 문자 하나 삭제
sb.deleteCharAt(5); // "helloorld"
// 문자열 뒤집기
sb.reverse(); // "dlroolleh"
// 최종 문자열로 변환
String result = sb.toString();
System.out.println(result); // dlroolleh
문자 반복 출력하기
📋 문제 설명
문자열 my_string
과 정수 n
이 매개변수로 주어질 때, my_string
에 들어있는 각 문자를 n
만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.
📌 제한사항
2 ≤ my_string
의 길이 ≤ 5
2 ≤ n
≤ 10
my_string
은 영어 대소문자로 이루어져 있습니다.
class Solution {
public String solution(String my_string, int n) {
StringBuilder sb = new StringBuilder();
for (char c : my_string.toCharArray()) { // ✏️
sb.append(String.valueOf(c).repeat(n));
}
return sb.toString();
}
}
✏️ split("")
대신 toCharArray()
쓰기
순서쌍의 개수
📋 문제 설명
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n
이 매개변수로 주어질 때, 두 숫자의 곱이 n
인 자연수 순서쌍의 개수를 return 하도록 solution 함수를 완성해주세요.
📌 제한사항
1 ≤ n
≤ 1,000,000
class Solution {
public int solution(int n) {
int count = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
count++;
}
}
return count;
}
}
// 다른 풀이: 최적화
class Solution {
public int solution(int n) {
int count = 0;
for (int i = 1; i * i <= n; i++) { // ✏️
if (n % i == 0) {
count++; // i가 약수이면
if (i != n / i) {
count++; // 짝이 되는 n/i도 약수
}
}
}
return count;
}
}
✏️ 약수는 √n까지만 검사해도 된다는 사실 기억하기
문자열 정렬하기 (1)
📋 문제 설명
문자열 my_string
이 매개변수로 주어질 때, my_string
안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
📌 제한사항
1 ≤ my_string
의 길이 ≤ 100
my_string
에는 숫자가 한 개 이상 포함되어 있습니다.
my_string
은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
class Solution {
public int[] solution(String my_string) {
List<Integer> numbers = new ArrayList<>();
for (char c : my_string.toCharArray()) {
if (Character.isDigit(c)) { // 1️⃣
numbers.add(c - '0'); // 2️⃣
}
}
Collections.sort(numbers);
return numbers.stream()
.mapToInt(Integer::intValue) // 3️⃣
.toArray();
}
}
1️⃣ Character.isDigit()
으로 문자가 숫자인지('0'
~'9'
) 판별하기
2️⃣ 문자(char)를 진짜 정수(int)로 변환하기 위해서 c - '0'
사용하기
3️⃣ List<Integer>
는 객체(참조형)이고, 우리가 원하는 결과는 기본형 int[]
배열이기 때문에 mapToInt
변환 필요
'자바' 카테고리의 다른 글
프로그래머스 코딩 기초 트레이닝 🔥 조건문 / 반복문 (0) | 2025.05.01 |
---|---|
프로그래머스 코딩 기초 트레이닝 🔥 출력 / 연산 / 문자열 (0) | 2025.04.30 |
프로그래머스 코딩테스트 입문 60% (0) | 2025.04.27 |
프로그래머스 코딩테스트 입문 20% (0) | 2025.04.25 |
자바 입출력 정리 (0) | 2025.04.25 |