프로그래머스 코딩테스트 입문 40%

2025년 04월·자바

더보기

모든 문제를 기록하는 게 비효율적인 것 같아서 방식을 바꿔보았습니다 ! ₍ᐢ⑅• ̫•⑅ᐢ₎ദ⸒⸒

배열 두배 만들기

📋 문제 설명

정수 배열 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
'자바' 카테고리의 다른 글
  • 프로그래머스 코딩 기초 트레이닝 🔥 출력 / 연산 / 문자열
  • 프로그래머스 코딩테스트 입문 60%
  • 프로그래머스 코딩테스트 입문 20%
  • 자바 입출력 정리
토토이
토토이
토토이 님의 블로그 입니다.
  • 토토이
    토토이 님의 블로그
    토토이
    • 분류 전체보기 (18)
      • KT 에이블스쿨 (5)
      • 복습 (1)
      • 자바 (11)
      • 뻐꿈 (0)
  • 태그

    AICE
    java
    스택
    에이블스쿨
    인프런
    자격증
    자바
    취준
    코딩테스트
    코테
    프로그래머스
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
  • hELLO· Designed By정상우.v4.10.3
토토이
프로그래머스 코딩테스트 입문 40%
상단으로

티스토리툴바