기타/study

코딩 기초 트레이닝 - 프로그래머스(차근차근 시작해 보세요 Day 11)

javaboiii 2025. 1. 7. 02:48

문제 설명

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 1 ≤ my_string의 길이 ≤ 1,000

 

입출력 예
my_string result
"Programmers" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.
class Solution {
    public int[] solution(String my_string) {
        int[] answer = new int[52];
        
          for (char c : my_string.toCharArray()) {
            if (c >= 'A' && c <= 'Z') {
                // 대문자 'A'의 위치는 0, 'B'는 1, ..., 'Z'는 25
                answer[c - 'A']++;
            } else if (c >= 'a' && c <= 'z') {
                // 소문자 'a'의 위치는 26, 'b'는 27, ..., 'z'는 51
                answer[c - 'a' + 26]++;
            }
        }
        return answer;
    }
}

문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항
  • 1 ≤ n ≤ 1,000,000
  • 1 ≤ k ≤ min(1,000, n)

 

입출력 예
n k result
10 3 [3, 6, 9]
15 5 [5, 10, 15]

입출력 예 설명

입출력 예 #1

  • 1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.

입출력 예 #2

  • 1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.
import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> solution(int n, int k) {
        List<Integer> answer = new ArrayList<Integer>();
        for(int i=1; i<=n; i++){
            if(i%k==0){
                answer.add(i);
            }
        }
        return answer;
    }
}

문제 설명

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 1 ≤ indices의 길이 < my_string의 길이 ≤ 100
  • my_string은 영소문자로만 이루어져 있습니다
  • 0 ≤ indices의 원소 < my_string의 길이
  • indices의 원소는 모두 서로 다릅니다.

 

입출력 예
my_string indices result
"apporoograpemmemprs" [1, 16, 6, 15, 0, 10, 11, 3] "programmers"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.

|index|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|

|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

|my_string|a|p|p|o|r|o|o|g|r|a|p|e|m|m|e|m|p|r|s|

`indices`에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니
class Solution {
    public String solution(String my_string, int[] indices) {
        // StringBuilder를 사용하여 새로운 문자열을 만들기 위해 초기화
        StringBuilder result = new StringBuilder();
        
        // 인덱스를 배열로 변환하여 빠른 확인을 위해 체크할 수 있는 배열 생성
        boolean[] toRemove = new boolean[my_string.length()];
        
        // 주어진 인덱스 배열에 해당하는 인덱스를 true로 표시
        for (int idx : indices) {
            toRemove[idx] = true;
        }
        
        // 문자열을 순차적으로 확인하여 인덱스가 제거 대상이면 추가하지 않음
        for (int i = 0; i < my_string.length(); i++) {
            if (!toRemove[i]) {  // 제거하지 않은 문자는 StringBuilder에 추가
                result.append(my_string.charAt(i));
            }
        }
        
        // 최종 결과 문자열을 반환
        return result.toString();
    }
}

문제 설명

정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.


제한사항
  • 0 ≤ end_num  start_num ≤ 50

입출력 예
start_num end_num result
10 3 [10, 9, 8, 7, 6, 5, 4, 3]

입출력 예 설명

입출력 예 #1

  • 10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.
import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> solution(int start_num, int end_num) {
        List<Integer> answer = new ArrayList<Integer>();
        for(int i=start_num; i>=end_num; i--){
            answer.add(i);
        }
        return answer;
    }
}

문제 설명

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.


제한사항
  • 3 ≤ arr의 길이 ≤ 100'000
    • arr의 원소는 전부 1 또는 0입니다.

 

입출력 예
arr idx result
[0, 0, 0, 1] 1 3
[1, 0, 0, 1, 0, 0] 4 -1
[1, 1, 1, 1, 0] 3 3

입출력 예 설명

입출력 예 #1

  • 1보다 크면서 원소가 1인 가장 작은 인덱스는 3입니다. 따라서 3을 return 합니다.

입출력 예 #2

  • 4번 인덱스 이후에 1은 등장하지 않습니다. 따라서 -1을 return 합니다.

입출력 예 #3

  • 3번 인덱스의 값이 1입니다. 따라서 3을 return 합니다.
class Solution {
    public int solution(int[] arr, int idx) {
        // idx부터 배열 끝까지 탐색
        for (int i = idx; i < arr.length; i++) {
            if (arr[i] == 1) {
                return i;  // 첫 번째 1을 찾으면 해당 인덱스를 반환
            }
        }
        return -1;  // 조건에 맞는 1을 찾지 못하면 -1 반환
    }
}