개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 24일차 TIL + 오늘의 학습 가이드

킴도비 2024. 8. 14. 21:54

💡 오늘의 학습 키워드

  • 그래프

 

✅ 오늘 공부한 내용

  • 오늘의 프로그래머스 문제! 대충 만든 자판
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

👀 오늘의 회고

🤣 오늘의 문제점

  • keyMap에 대해서 복잡하게 생각했었는데 조금 더 간단하게 생각해볼걸! 이라 느꼈다.

 

🔥 어떤 시도를 했는가?

  • 원래는 charAt으로 하나씩 비교하려고 했는데 HashMap으로 저장한 후 비교하는 방법이 제일 빨라 그 방법으로 선택하게 되었다.
import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        // 각 문자가 각 키에서 최소 몇 번 눌러야 하는지를 저장하는 맵
        Map<Character, Integer> minPressMap = new HashMap<>();

        for (String key : keymap) {
            for (int i = 0; i < key.length(); i++) {
                char ch = key.charAt(i);
                int pressCount = i + 1; // 해당 문자를 만들기 위한 키 누름 횟수

                // 이미 저장된 값보다 작은 값이 있는 경우 업데이트
                if (minPressMap.containsKey(ch)) {
                    minPressMap.put(ch, Math.min(minPressMap.get(ch), pressCount));
                } else {
                    minPressMap.put(ch, pressCount);
                }
            }
        }

        // 각 타겟 문자열에 대해 최소 키 누름 횟수를 계산
        int[] result = new int[targets.length];
        for (int i = 0; i < targets.length; i++) {
            String target = targets[i];
            int totalPress = 0;
            boolean isPossible = true;

            for (int j = 0; j < target.length(); j++) {
                char ch = target.charAt(j);

                // 만약 해당 문자를 생성할 수 없다면 -1로 처리
                if (!minPressMap.containsKey(ch)) {
                    isPossible = false;
                    break;
                }

                // 해당 문자를 생성하기 위한 키 누름 횟수 추가
                totalPress += minPressMap.get(ch);
            }

            // 작성 불가능하면 -1, 가능하면 최소 누름 횟수 저장
            result[i] = isPossible ? totalPress : -1;
        }
        
        return result;
    }
}

 

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해 99 문제 풀기
  • 공고 지원하기
  • 책 읽기