본문 바로가기
알고리즘/알고리즘 설명

20230704 [Java] 문제풀이

by JayAlex07 2023. 7. 4.

20230704 [Java] 문제풀이

 

[프로그래머스] 숫자 짝꿍

 

두 개의 숫자가 문자열로 주어진다

 

두 숫자가 공통으로 가진 숫자들을 모아서 제일 큰 수를 만드는 것이다

  • 110, 11110 이면 110이 있어 110이 가장 큰 숫자다
  • 1234, 123456 에서는 1234가 있고 4321이 가장 큰 숫자다

 

0~9까지, 각각 숫자들의 개수를 넣으려는 배열을 2개 만들었다

  • 하나는 X 수에 대한 배열
  • 하나는 Y 수에 대한 배열

 

두 배열을 제일 뒷부분에서 순회하면서, 0이 아닐 경우 겹치니깐 두 배열 중 작은 숫자만큼 문자열에 넣어주면 된다

 

StringBuffer를 사용할 때에는 .toString() 을 이용하면 문자열로 바꿔준다

import java.util.*;

class Solution {

    public String solution(String X, String Y) {
        StringBuffer answer = new StringBuffer();

        int[] numX = new int[10];
        int[] numY = new int[10];

        for (int i = 0; i < X.length(); i++) {
            numX[(int) X.charAt(i) - 48] ++;
        }

        for (int i = 0; i < Y.length(); i++) {
            numY[(int) Y.charAt(i) - 48] ++;
        }

        for (int i = 9; i >= 0; i--) {
            if (numX[i] != 0 && numY[i] != 0) {
                int minNum = Math.min(numX[i], numY[i]);

                for (int j = 0; j < minNum; j++) {
                    answer.append(i); 
                }
            }
        }

        if (answer.length() == 0) return "-1";
        if (answer.charAt(0) == '0') return "0";
        return answer.toString();

    }
}

 

 

성격 유형 검사하기

 

유형 별로 점수를 맥여서, MBTI 처럼 결과를 나타내는 것이다

 

HashMap을 사용하고, key에는 각 나눠지는 유형과, value에는 2개의 길이의 배열을 넣었다

  • "RT" 를 key로 넣고 배열 첫번째 인덱스는 R에 대한 점수, 두 번째는 T에 대한 점수를 넣었다

 

type과 typeString 배열을 만들어서, 나중에 총 계산을 할 때에, 그리고 성격 유형을 제대로 만들 때에, 활용을 했다

  • type을 통해서 RT 중에 R인지 T인지, RT의 인덱스를 저장했다 (R의 점수가 크거나 두 점수가 같을 경우 0을, T 점수가 크면 1을 넣었다)
    • 이렇게 해서, 나중에 최종 결과를 낼 때에, typeString을 순회하면서, 각 두 개의 유형 중 인덱스를 type에서 꺼내면 된다
import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer = "";

        HashMap<String, int[]> result = new HashMap<String, int[]>();

        result.put("RT", new int[2]);
        result.put("CF", new int[2]);
        result.put("JM", new int[2]);
        result.put("AN", new int[2]);

        int[] type = new int[4]; 
        String[] typeString = {"RT", "CF", "JM", "AN"};

        int[] score = {3, 2, 1, 0, 1, 2, 3};
        Character upLetter;

        for (int i = 0; i < survey.length; i++) {
            if (choices[i] != 4) {
                if (choices[i] > 4) {
                    upLetter = survey[i].charAt(1);

                    if (survey[i].equals("RT") || survey[i].equals("TR")) {
                        if (upLetter == 'R') {
                            result.get("RT")[0] += score[choices[i] - 1];
                        } else {
                            result.get("RT")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("CF") || survey[i].equals("FC")) {
                        if (upLetter == 'C') {
                            result.get("CF")[0] += score[choices[i] - 1];
                        } else {
                            result.get("CF")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("JM") || survey[i].equals("MJ")) {
                        if (upLetter == 'J') {
                            result.get("JM")[0] += score[choices[i] - 1];
                        } else {
                            result.get("JM")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("AN") || survey[i].equals("NA")) {
                        if (upLetter == 'A') {
                            result.get("AN")[0] += score[choices[i] - 1];
                        } else {
                            result.get("AN")[1] += score[choices[i] - 1];
                        }
                    }

                } else {
                    upLetter = survey[i].charAt(0);

                    if (survey[i].equals("RT") || survey[i].equals("TR")) {
                        if (upLetter == 'R') {
                            result.get("RT")[0] += score[choices[i] - 1];
                        } else {
                            result.get("RT")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("CF") || survey[i].equals("FC")) {
                        if (upLetter == 'C') {
                            result.get("CF")[0] += score[choices[i] - 1];
                        } else {
                            result.get("CF")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("JM") || survey[i].equals("MJ")) {
                        if (upLetter == 'J') {
                            result.get("JM")[0] += score[choices[i] - 1];
                        } else {
                            result.get("JM")[1] += score[choices[i] - 1];
                        }
                    } else if (survey[i].equals("AN") || survey[i].equals("NA")) {
                        if (upLetter == 'A') {
                            result.get("AN")[0] += score[choices[i] - 1];
                        } else {
                            result.get("AN")[1] += score[choices[i] - 1];
                        }
                    }

                }
            }
        }


        int i = 0;
        for (String string : result.keySet()) {
            System.out.println(Arrays.toString(result.get(string)));
            if (result.get(string)[0] < result.get(string)[1]) {
                type[i] = 1;
            }
            i ++;
        }

        for (int idx = 0; idx < 4; idx++) {
            answer += typeString[idx].charAt(type[idx]);
        }

        return answer;
    }
}

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

20230706 [Java] 문제풀이  (0) 2023.07.06
20230705 [Java] 문제풀이  (0) 2023.07.05
20230703 [Java] 문제풀이  (0) 2023.07.03
20230702 [Java] 문제풀이  (0) 2023.07.02
20230629 [Java] 문제풀이  (0) 2023.06.29