programmers Day15

Hwani·2024년 5월 21일

프로그래머스 DAY 1~25

목록 보기
15/51

문제 - 영어가 싫어요

풀이

class Solution {
    public long solution(String numbers) {
        String[] matchNumbers = {
                "zero", "one", "two"
                , "three", "four", "five"
                , "six", "seven", "eight", "nine"};

        for (int i = 0; i < matchNumbers.length; i++) {
            numbers = numbers.replaceAll(matchNumbers[i], String.valueOf(i));
        }
        return Long.parseLong(numbers);
    }
}

설명

  • 문제에서 원하는 영단어만 담겨진 배열을 만든다.
  • for문으로 matchNumbers의 담긴 값이 있다면 i 번째 번호로 대체해서 numbers에 대입한다.
  • 문제에서 String 타입의 numbers로 주어졌기 때문에 int로 형변환하여 리턴한다.

문제 - 인덱스 바꾸기

풀이

class Solution {
    public String solution(String my_string, int num1, int num2) {
        String answer = "";
        
        char[] charArray = my_string.toCharArray();

        // num1과 num2 위치의 문자 교환
        char temp = charArray[num1];
        charArray[num1] = charArray[num2];
        charArray[num2] = temp;

        // 문자 배열을 문자열로 변환
        String result = new String(charArray);
        
        return result;
    }
}

설명

  • 주어진 매개변수 my_string을 char 타입으로 하나씩 나누는 배열을 만든다.
  • 주어진 매개변수 num1, num2에 따라 charArray에 대입하여 바꾼다.
  • char 타입의 문자를 String 타입의 문자열로 변환하여 리턴한다.

문제를 보고 StringBuilder나 replace를 이용한 문제인 줄 알았는데 char타입의 배열로 변환하여 푸는 문제였다.

문제 - 한 번만 등장한 문자

풀이

public String solution(String s) {
        // 1. 각 문자의 등장 횟수를 센다.
        Map<Character, Integer> frequencyMap = new HashMap<>();
        for (char c : s.toCharArray()) {
            frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
        }

        // 2. 한 번만 등장하는 문자를 필터링한다.
        ArrayList<Character> uniqueChars = new ArrayList<>();
        for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
            if (entry.getValue() == 1) {
                uniqueChars.add(entry.getKey());
            }
        }

        // 3. 필터링된 문자를 사전 순으로 정렬한다.
        Collections.sort(uniqueChars);

        // 4. 정렬된 문자를 결합하여 반환한다.
        StringBuilder result = new StringBuilder();
        for (char c : uniqueChars) {
            result.append(c);
        }

        return result.toString();
    }

설명

  • HashMap은 Key, Value로 이루어져있다.
    여기서는 Key는 문자, Value는 등장한 횟수로 이루어져있다.
  • entrySet은 등장 횟수가 1인 문자를 UniqueChars에 담아준다.
  • 사전순으로 정렬 후 String으로 타입 변환하여 리턴한다.

아직 Map, HashMap 에 대해서 공부가 부족하다.

문제 - 약수 구하기

풀이

import java.util.*;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> answer = new ArrayList<>();

        for (int i = 1; i <= n ; i++) {
            if (n % i == 0) {
                answer.add(i);
            }
        }

        int[] num = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            num[i] = answer.get(i);
        }
        
        return num;
    }
}

설명

  • 매개변수 n에 대해서 약수의 갯수가 달라지기 때문에 ArrayList를 생성해준다.
  • n을 i로 나누어 나머지가 0인게 약수이기 때문에 answer에 담아준다.
  • int[] 로 리턴해줘야해서 ArrayList에 값을 int[] num에 담아 리턴해준다.
profile
개발자될거야

0개의 댓글