코딩테스트 DAY12

차준우·2022년 12월 22일
0
post-thumbnail

프로그래머스 코딩테스트 입문 - DAY12

😒모음 제거

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

my_stringresult
"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;
    }
}

😒문자열 정렬하기 (1)

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

테스트 케이스

letterresult
"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(정렬)

😒숨어있는 숫자의 덧셈 (1)

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

my_stringresult
"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 함수를 완성해주세요.

테스트 케이스

nresult
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

profile
개애발

0개의 댓글