
프로그래머스에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.

점차 메서드와 로직에 익숙해져가고 있는 단계. 문제를 푸는 것에도 시간이 많이 단축되어 이번에는 20분에 전 문제를 해결했다.
문자 개수 세기
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
문제 해설
알파벳이 int화 되면 아스키코드가 나온다는 지점을 알고 있어야 한다. A는 65이기 때문에 ch - 65 = 0 이라는 A이다. 이 지점을 이용해서 answer의 index 0부터 채우면 된다. 다만 소문자와 대문자 사이에 다른 문자가 있음에 유의할 것.
정답
class Solution {
public int[] solution(String my_string) {
int[] answer = {};
answer = new int[52];
int index = 0;
for(int i = 0; i < my_string.length(); i++){
char ch = my_string.charAt(i);
if(Character.isUpperCase(ch)){
index = (int)(ch - 'A');
} else {
index = (int)(ch - 'a' + 26);
}
answer[index]++;
}
return answer;
}
}
사실 형변환은 굳이 필요하지 않다.
배열 만들기 1
정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
문제 해설
answer의 배열 크기를 n / k하여 그 몫만큼으로 하면 된다. 그리고 answer의 요소는 i * k로 처리하면 된다(i가 0이기 때문에 +1해주는 것이 좋다.)
이번에는 거의 정석에 가깝게 풀었다.
정답
class Solution {
public int[] solution(int n, int k) {
int[] answer = {};
int idx = n / k;
answer = new int[idx];
for(int i = 0; i < idx; i++){
answer[i] = (i + 1) * k;
}
return answer;
}
}
글자 지우기
문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
문제 해설
사람에 따라 사고가 달라 다른 정답이 나올 수 있는 문제. 나의 경우에는 StringBuilder와 deleteCharAt을 사용하였다. indices의 요소를 정리하고, 한 글자씩 정리될 때마다 index가 앞당겨지는 걸 이용하였다.
정답
import java.util.Arrays;
class Solution {
public String solution(String my_string, int[] indices) {
StringBuilder answer = new StringBuilder(my_string);
int index = 0;
Arrays.sort(indices);
for(int i = 0; i < indices.length; i++) {
index = indices[i] - i;
answer.deleteCharAt(index);
}
return answer + "";
}
}
deleteCharAt(index)
index 위치에 있는 글자를 삭제한다.
가장 많은 좋아요를 받은 정답은 이것.
class Solution {
public String solution(String my_string, int[] indices) {
String answer = "";
String[] tmp = my_string.split("");
for (int i = 0; i < indices.length; i++) {
tmp[indices[i]] = "";
}
for (String x : tmp) {
answer += x;
}
return answer;
}
}
split을 하여 배열 tmp로 만들고 여기서 indices의 [i] 값인 인덱스를 ""로 한 뒤, 추가하는 형태가 된다.
카운트 다운
정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
문제 해설
start_num에서 end_num을 뺀 값(+1)을 배열의 길이로 만들고, start_num에서 i만큼을 뺀 값을 answer 배열의 요소로 반환한다.
정답
class Solution {
public int[] solution(int start_num, int end_num) {
int[] answer = {};
int idx = start_num - end_num + 1;
answer = new int[idx];
for(int i = 0; i < idx; i++){
answer[i] = start_num - i;
}
return answer;
}
}
제일 보편적인(제일 많이 제출된) 답으로 보인다.
가까운 1 찾기
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
문제 해설
예전에 했던 문제와 엇비슷하다.
for문으로 arr.length를 순환하여 만약 idx보다 인덱스가 크고 그 값이 1일 경우 그 인덱스값 i를 answer에 넣고 break; 처리하면 된다.
정답
class Solution {
public int solution(int[] arr, int idx) {
int answer = -1;
for(int i = 0; i<arr.length; i++){
if(i >= idx && arr[i] == 1){
answer = i;
break;
}
}
return answer;
}
}
제일 보편적인(제일 많이 제출된) 답으로 보인다.
'코테런 > 코딩 기초 트레이닝(완주)' 카테고리의 다른 글
| [코딩 테스트 RUN] 코딩 기초 트레이닝 13일차: 리스트(배열) (0) | 2026.02.18 |
|---|---|
| [코딩 테스트 RUN] 코딩 기초 트레이닝 12일차: 리스트(배열) (0) | 2026.02.17 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 10일차: 문자열 (0) | 2026.02.15 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 9일차 (0) | 2026.02.14 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 8일차 (0) | 2026.02.13 |
