프로그래머스 Day11 리스트(배열)
문자 개수 세기
💫문제 설명💫
알파벳 대소문자로만 이루어진 문자열 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
💫입출력 ex💫
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] |
문제풀이
import java.util.*;
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52]; // 알파벳 개수를 저장할 배열 선언 (A부터 Z, a부터 z까지 52개)
for (char c : my_string.toCharArray()) {
if (c >= 'A' && c <= 'Z') {
answer[c - 'A']++; // 대문자의 경우 A부터 시작해서 해당 알파벳의 인덱스를 증가시킴
} else if (c >= 'a' && c <= 'z') {
answer[c - 'a' + 26]++; // 소문자의 경우 a부터 시작해서 해당 알파벳의 인덱스를 증가시킴
}
}
return answer;
}
}
배열 만들기 1
💫문제 설명💫
정수 n과 k가 주어졌을 때,
1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
💫제한사항💫
1 ≤ n ≤ 1,000,000
1 ≤ k ≤ min(1,000, n)
💫입출력 ex💫
n | k | result |
---|---|---|
10 | 3 | [3, 6, 9] |
15 | 5 | [5, 10, 15] |
문제풀이
import java.util.stream.*;
class Solution {
public int[] solution(int n, int k) {
// IntStream.rangeClosed(k, n) k부터 n까지
// filter(i -> i % k == 0) k의 배수
return IntStream.rangeClosed(k, n).filter(i -> i % k == 0).toArray();
}
}
글자 지우기
💫문제 설명💫
문자열 my_string과 정수 배열 indices가 주어질 때,
my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
💫제한사항💫
1 ≤ indices의 길이 < my_string의 길이 ≤ 100
my_string은 영소문자로만 이루어져 있습니다
0 ≤ indices의 원소 < my_string의 길이
indices의 원소는 모두 서로 다릅니다.
💫입출력 ex💫
my_string | indices | result |
---|---|---|
“apporoograpemmemprs” | [1, 16, 6, 15, 0, 10, 11, 3] | “programmers” |
문제풀이
import java.util.*;
class Solution {
public String solution(String my_string, int[] indices) {
StringBuilder sb = new StringBuilder(my_string);
// 인덱스를 역순으로 정렬하여 뒤에서부터 글자를 지움
Arrays.sort(indices);
for (int i = indices.length - 1; i >= 0; i--) {
sb.deleteCharAt(indices[i]);
}
return sb.toString();
}
}
카운트 다운
💫문제 설명💫
정수 start와 end가 주어질 때,
start에서 end까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
💫제한사항💫
0 ≤ end ≤ start ≤ 50
💫입출력 ex💫
start | end | result |
---|---|---|
10 | 3 | [10, 9, 8, 7, 6, 5, 4, 3] |
문제풀이
import java.util.stream.*;
class Solution {
public int[] solution(int start, int end) {
return IntStream.iterate(start, i -> i - 1)
.limit(start - end + 1)
.toArray();
}
}
가까운 1 찾기
💫문제 설명💫
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때,
idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
💫제한사항💫
3 ≤ arr의 길이 ≤ 100'000
arr의 원소는 전부 1 또는 0입니다.
💫입출력 ex💫
arr | idx | result |
---|---|---|
[0, 0, 0, 1] | 1 | 3 |
[1, 0, 0, 1, 0, 0] | 4 | -1 |
[1, 1, 1, 1, 0] | 3 | 3 |
문제풀이
class Solution {
public int solution(int[] arr, int idx) {
int answer = 0;
for (int i = 0; i < arr.length; i++) {
if (i >= idx && arr[i] == 1) {
answer = i;
break;
} else {
answer = -1;
}
}
return answer;
}
}
Leave a comment