[프로그래머스] 18 : 햄버거 만들기 | 성격 유형 검사하기

서예진·2024년 2월 1일
0

목차

▸ 햄버거 만들기
▸ 성격 유형 검사하기


💡햄버거 만들기 : Lv.1

▼ 문제

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 햄버거 만들기

▼ 내 풀이

  • 전달받은 배열을 문자열로 바꾸어 1231이 포함되어있으면 제거하는 방식으로 접근했다.
  • 그러나 replace()메서드가 시간적으로 비효율적이여서 8개의 테스트에서 시간초과가 떴다.
class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        StringBuilder stringBuilder = new StringBuilder();
        
        for(int i = 0; i < ingredient.length; i++){
            stringBuilder.append(ingredient[i]);
        }
        String temp = stringBuilder.toString();
        int before = temp.length();
        
        for(int i = 0; i < temp.length(); i++){
            temp = temp.replace("1231", "");
        }
        int after = temp.length();
        
        answer = (before - after)/4; 
        return answer;
    }
} 
  • 문자열로 접근하지 말고 숫자 배열 그래도 접근하기로 했다.
  • 배열의 요소들을 삭제하기 쉽게 배열을 리스트로 변환했다.
  • 배열의 요소들을 리스트에 집어넣으면서 리스트의 사이즈가 4이상이 되었을 때 1,2,3,1이 있는지 비교하고 있으면 answer++ 하고 해당 요소를 리스트에서 삭제한다.
  • 이때, 리스트에서 각 요소는 'ingredientList.size()-4' 이런식으로 접근해야한다.
[수정 코드]
import java.util.List;
import java.util.ArrayList;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        List<Integer> ingredientList = new ArrayList<>();
        
        for(int i : ingredient){
            ingredientList.add(i);
            
            if(ingredientList.size() >= 4){
                if(ingredientList.get(ingredientList.size()-4) == 1 && ingredientList.get(ingredientList.size()-3) == 2 && ingredientList.get(ingredientList.size()-2) == 3 && ingredientList.get(ingredientList.size()-1) == 1){
                    answer ++;
                    ingredientList.remove(ingredientList.size()-4);
                    ingredientList.remove(ingredientList.size()-3);
                    ingredientList.remove(ingredientList.size()-2);
                    ingredientList.remove(ingredientList.size()-1);
                }
            }
        }
        
        return answer;
    }
}

💡성격 유형 검사하기 : Lv.1

▼ 문제

출처: 프로그래머스 코딩테스트 연습 > 2022 KAKAO TECH INTERNSHIP > 성격 유형 검사하기

▼ 내 풀이

  • 각 검사별 점수를 저장할 공간이 있어야한다. 각 검사별 점수를 저장해야하기 때문에 HashMap을 선택했다.
  • 각 점수가 4보다 작으면 주어진 검사의 첫번째 유형이고, 4보다 크면 두번째 유형이다.
  • 또한, 이미 점수가 존재하는 경우를 고려하여 getOrdefault 메서드와 if-else if문을 사용하여 점수를 맵에 저장했다.
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;

class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer = "";
        Map<Character, Integer> map = new HashMap<>();
        StringBuilder stringBuilder = new StringBuilder();
        
        for(int i = 0; i < survey.length; i++){
            int choice = choices[i];
            
            if(choice > 0 && choice < 4){
                char c = survey[i].charAt(0);
                map.put(c, map.getOrDefault(c, 0) + 4 - choice);
            }else if(choice > 4){
                char c = survey[i].charAt(1);
                map.put(c, map.getOrDefault(c, 0) + choice - 4);
            }
        }
        
        stringBuilder.append(map.getOrDefault('R', 0) >= map.getOrDefault('T', 0) ? 'R' : 'T');
        stringBuilder.append(map.getOrDefault('C', 0) >= map.getOrDefault('F', 0) ? 'C' : 'F');
        stringBuilder.append(map.getOrDefault('J', 0) >= map.getOrDefault('M', 0) ? 'J' : 'M');
        stringBuilder.append(map.getOrDefault('A', 0) >= map.getOrDefault('N', 0) ? 'A' : 'N');
        
        answer = stringBuilder.toString();
        return answer;
    }
}
  • 이 문제를 풀면서 getOrDefault 메서드에 대해서 알게 되었다.
profile
안녕하세요

0개의 댓글