프로그래머스 코딩테스트 입문 - DAY12
영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
my_string | result |
---|---|
"bus" | "bs" |
"nice to meet you" | "nc t mt y" |
class Solution {
public String solution(String my_string) {
String answer = "";
answer = my_string.replaceAll("[aeiou]", "");
return answer;
}
}
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
letter | result |
---|---|
"hi12392" | [1, 2, 2, 3, 9] |
"p2o4i8gj2" | [2, 2, 4, 8] |
"abcde0" | [0] |
import java.util.Arrays;
import java.util.stream.Stream;
class Solution {
public int[] solution(String my_string) {
int[] answer = {};
String tmp = "";
char[] arr = my_string.toCharArray();
for(int i=0;i<arr.length;i++) {
if(Character.isDigit(arr[i])) {
tmp+= arr[i];
}
}
answer = new int[tmp.length()];
answer = Stream.of(tmp.split("")).mapToInt(Integer::parseInt).toArray();
Arrays.sort(answer);
return answer;
}
}
1.배열화하고 하나씩 비교하며 숫자인지 판단.숫자일 경우, string형태의 tmp변수에 붙이기
2.stream을 통해 string인 tmp를 int형 배열로 변환하여 answer에 삽입
3.Arrays를 통해 배열을 sort(정렬)
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
my_string | result |
---|---|
"aAb1B2cC34oOp" | 10 |
"1a2b3c4d123" | 16 |
class Solution {
public int solution(String my_string) {
int answer = 0;
char[] arr = my_string.toCharArray();
for(int i=0;i<arr.length;i++) {
if(Character.isDigit(arr[i])) {
answer += arr[i]-48; //char를 int형answer에 넣으면
//아스키코드 값이 들어가므로 -48을 통해 해결
}
}
return answer;
}
}
아스키코드에서 48은 숫자 0을 의미한다. char(아스키코드)에서 숫자 1은 49이므로
int형인 answer에 숫자 1을 넣으려면 char형태인 arr[]에서 - 48을 해야한다.
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 2 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
n | result |
---|---|
12 | [2, 3] |
17 | [17] |
420 | [2, 3, 5, 7] |
import java.util.Arrays;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.util.*;
class Solution {
public int[] solution(int n) {
int[] answer = {};
int i = 2;
int cnt = 0;
String str = "";
List<Integer> obj = new ArrayList<>();
while(i<=n) {
if(n%i==0) {
n/=i;
obj.add(i);
cnt++;
}
else
i++;
}
if (cnt==1)
answer = new int[]{obj.get(0)};
else{
List<Integer> newList = obj.stream().distinct().collect(Collectors.toList());//중복값 제거
answer = newList.stream().mapToInt(Integer::intValue).toArray();
}
return answer;
}
}
String변수에 값들을 넣어서 split을 이용해서 작성했던 코드는 테스트 케이스만 합격하고 제출하면 틀려서 뭐가 문제인지 생각해보니, 두자릿수를 split("")으로 나눠버려서 발생한 문제였다. 예를 들어, 22는 [2,11]이 나와야 하는데 [2,1,1]로 값이 들어가던 문제.
그래서 String 변수에서 List에 값을 넣는 것으로 변경했다.
List는 배열과는 다르게 크기를 동적할당 할 수 있어서 편리하다는 장점이 있다.
값을 추가할 때는 add를, 조회할 때는 get을 사용한다. 중복값을 제거한 Integer형 list는 객체 형태이므로
중복값을 제거한 후에는 다시 int형 array로 변환해주도록 하자
출처 : https://school.programmers.co.kr/learn/challenges
이미지 출처 : 작가 storyset 출처 Freepik