코테 준비 14일차_8/25

Jieun·어제

코딩테스트 준비

목록 보기
7/8
  1. 숫자 짝꿍
    x랑 y랑 각각 비교해서 같은걸 따로 두고 이걸 내림차순 정렬하면 될거같음
  • 초기 정답
class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        for(int i=0; i<X.length();i++) {
            for(j=0;j<Y.length();i++){
                if(X.charAt(i) == Y.charAt(i)) {
                    answer += X.charAt(i);
                }else {
                    answer += '-1';
                }
            }
        }
        return answer.desc();
    }
}
  • AI 풀이
    0부터 9까지의 숫자 빈도수 활용하면 쉽게 풀 수 있음
  1. 개수 세기 : 0~9까지 숫자가 몇번 나오는지 카운팅해서 배열에 담기
  2. 공통 숫자 찾기 : 두 배열 비교해서 둘 다 공통으로 가진 개수만큼 가져옴
  3. 큰 수부터 조합하기 : 가장 큰 정수 만들어야 하므로 9부터 0까지 거꾸로 StringBuilder에 붙여줌
  4. 예외처리 : 공통 숫자 없으면 -1, 결과가 0만 있으면 0리턴
  • 제출 정답
class Solution {
    public String solution(String X, String Y) {
        int[] countX = new int[10];
        int[] countY = new int[10];
        
        for(char c : X.toCharArray()) {
            countX[c-'0']++;
        }
        for(char c : Y.toCharArray()) {
            countY[c-'0']++;
        }
        StringBuilder sb = new StringBuilder();
        
        for(int i=9;i>=0;i--) {
            int commoncount = Math.min(countX[i], countY[i]);
            for(int j=0;j<commoncount;j++) {
                sb.append(i);
            }
        }
        if(sb.length() ==0) {
            return "-1";
        }
        if(sb.charAt(0) == '0') {
            return "0";
        }
        return sb.toString();
    }
}
  1. 성격 유형 검사하기
    아까처럼 유형별로 빈도수 확인하고, 높은순으로 숫자 나열하면 될거같음
    문자열 2자리인데 하나씩 분리방법을 모르겠음
    분리한거랑 따로 배열 만든걸 어떻게 연결해야 될지 모르겠음
    질문 배치표대로 점수 나눠야되는데 그럼 반복문이 너무 커지는데,,
    중간이 4점이니까 크거나 작은만큼 점수 더해지게 하면 될거같은데
  • 초기 정답
class Solution {
    public String solution(String[] survey, int[] choices) {
        int[] countR = new int[10];
        int[] countT = new int[10];
        int[] countC = new int[10];
        int[] countF = new int[10];
        int[] countJ = new int[10];
        int[] countM = new int[10];
        int[] countA = new int[10];
        int[] countN = new int[10];
        
        for(int i=0;i<choices.length;i++) {
        char a = survey[i].charAt(0);
        char b = survey[i].charAt(1);
            if(choices[i] > 4) {
                
            }
        return answer;
        }
    }
}
  • AI 풀이
    각각 배열 안쓰고 HashMap쓰면 더 깔끔하게 관리할 수 있음
    정해진 지표 두개 비교해서 큰거 선택하고, 같으면 사전순서 빠른순으로 선택

  • 제출 정답

import java.util.HashMap;
import java.util.Map;

class Solution {
    public String solution(String[] survey, int[] choices) {
       Map<Character, Integer> scoreMap = new HashMap<>();
        
        for(int i=0;i<choices.length;i++) {
        char a = survey[i].charAt(0);
        char b = survey[i].charAt(1);
        int choice = choices[i];
            
        if(choice < 4) {
            scoreMap.put(a, scoreMap.getOrDefault(a, 0) + (4-choice));                
            }
            else if(choice > 4) {
                scoreMap.put(b, scoreMap.getOrDefault(b,0) + (choice-4));
            }
     
        }
        StringBuilder sb = new StringBuilder();
        sb.append(scoreMap.getOrDefault('R', 0)  >= scoreMap.getOrDefault('T', 0) ? 'R' : 'T');
        sb.append(scoreMap.getOrDefault('C', 0) >= scoreMap.getOrDefault('F', 0) ? 'C' : 'F');
        sb.append(scoreMap.getOrDefault('J', 0) >= scoreMap.getOrDefault('M', 0) ? 'J' : 'M');
        sb.append(scoreMap.getOrDefault('A', 0) >= scoreMap.getOrDefault('N', 0) ? 'A' : 'N');
        return sb.toString();
    }
}
  1. 과일 장수
    점수가 큰거순으로 m개씩 묶고, 가격을 구하고 더하면 될거같음
    근데 큰거순으로 m씩 어떻게 묶지
  • 초기 정답
class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        for(int i =0;i<score.length;i++) {
            
        }
        return answer;
    }
}
  • AI 풀이
    우선 오름차순으로 정렬하고, 뒤에서부터 거꾸로 m씩 묶으면 제일 앞에 값이 가장 낮은 점수임

  • 제출 정답

import java.util.Arrays;
class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        Arrays.sort(score);
        for(int i =score.length-m;i>=0;i-=m) {
            answer += score[i] *m;
            
        }
        return answer;
    }
}
profile
비전공자의 백엔드 생존기: 어제보다 1% 더 성장하기

0개의 댓글