[20230101] 코딩테스트 스터디

6720·2023년 1월 2일
post-thumbnail

👨‍🏫 이번 목표

프로그래머스 코딩테스트 입문 Java로 Day 12 문자열, 정렬, 사칙연산, 수학 풀기

📒 문제 풀이 (Day 12 문자열, 정렬, 사칙연산, 수학)

모음 제거

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

제한사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_stringresult
"bus""bs"
"nice to meet you""nc t mt y"
class Solution {
    public String solution(String my_string) {
        String answer = "";
        char[] vowel = {'a', 'e', 'i', 'o', 'u'};
        
        x: for (int i = 0; i < my_string.length(); i++) {
            char letter = my_string.charAt(i);
            for (int j = 0; j < vowel.length; j++) {
                if (letter == vowel[j]) continue x;
            }
            answer += letter; 
            
        }
        return answer;
    }
}

문자열 정렬하기 (1)

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

제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다. - - -

입출력 예

my_stringresult
"hi12392"[1, 2, 2, 3, 9]
"p2o4i8gj2"[2, 2, 4, 8]
"abcde0"[0]
import java.util.Arrays;

class Solution {
    public int[] solution(String my_string) {
        int count = 0;
        String result = "";
        
        x: for (int i = 0; i < my_string.length(); i++) {
            char ch = my_string.charAt(i);
            if ((int)ch >= 97) continue x;
            count++;
            result += ch;
        }

        int[] answer = new int[count];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = (int)result.charAt(i) - 48;
        }
        Arrays.sort(answer);
        
        return answer;
    }
}

숫자에도 아스키 코드가 있다! 48부터 0이므로 -48을 넣어줬다.

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

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

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

입출력 예

my_stringresult
"aAb1B2cC34oOp"10
"1a2b3c4d123"16
class Solution {
    public int solution(String my_string) {
        int answer = 0;
        
        x: for (int i = 0; i < my_string.length(); i++) {
            char ch = my_string.charAt(i);
            if ((int)ch >= 65) continue x;
            answer += (int)ch - 48;
        }
        
        return answer;
    }
}

소인수분해

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 2 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 2 ≤ n ≤ 10,000

입출력 예

nresult
12[2, 3]
17[17]
420[2, 3, 5, 7]
import java.util.*;

class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        int count = 2;
        List<Integer> list = new ArrayList<>();

        while (count <= n) {
            if (n % count == 0) {
                list.add(count);
                n /= count;
            } else count++;
        }
        answer = list.stream().distinct().mapToInt(Integer::intValue).toArray();
        // stream(): 데이터의 흐름, 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있음.
        // mapToInt(Integer::intValue): Integer[] -> Int[]
        // toArray(): List -> Array
        
        return answer;
    }
}

자바로 풀면서 가장 까다로운 점은 배열의 경우는 크기를 선언 때부터 잡아줘야 하며 이 배열 크기는 못바꾼다는 것임. 그래서 다들 list를 많이 사용하는 듯함.

참고 링크

✨ 후기

1) 자바로 풀면서 가장 까다로운 점은 배열의 경우는 크기를 선언 때부터 잡아줘야 하며 이 배열 크기는 못바꾼다는 것임. 그래서 다들 list를 많이 사용하는 듯함.

2) 기록표

profile
뭐라도 하자

0개의 댓글