반응형
72. 대충 만든 자판

문제

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        Map<Character, Integer> map = new HashMap<>();    
    
        for(int i=0; i<keymap.length; i++){
            
            for(int j=0; j<keymap[i].length(); j++){
                if(map.containsKey(keymap[i].charAt(j))){
                    Integer cnt = map.get(keymap[i].charAt(j));
                    if(cnt > (j+1)){
                        map.put(keymap[i].charAt(j), j+1);
                    }
                } else{
                    map.put(keymap[i].charAt(j), j+1);
                }
                
            }
        }
        
        for(int i=0; i<targets.length; i++){
            int tCnt = 0;
            for(int j=0; j<targets[i].length(); j++){
                char ch = targets[i].charAt(j);
                Integer click = map.get(ch);
                
                if(click != null){
                    tCnt += click;
                } else{
                    tCnt = -1;
                    break;
                }
            }
            answer[i] = tCnt;
        }
        
        
        return answer;
    }
}

<작성한 코드>

answer의 길이는 targets의 길이만큼 크기를 지정해 줬다. HasdMap형태로 map 변수를 만들어서 키값은 Character형, 벨류값은 Integer형태로 만들었다. 첫 번째 for문에서는 keymap의 길이만큼 반복 시켜 주뒤 내부에서는 keymap 배열의 각 크기만큼 반복시키도록 했다. if문을 사용해서 map안에 각 문자열의 문자가 존재한다면 cnt에 그 값을 할당한다. 그 뒤 cnt가 j+1보다 크다면 그 문자키에 j+1 값을 넣어준다. 그 뒤 이미 저장된 횟수보다 현재 위치가 더 작다면 해당 키의 횟수를 업데이트한다. 만약 해당 키가 map에 존재하지 않는다면 새로운 키로 map에 추가하고 j+1을 횟수로 저장한다. 이제 두 번째 for문에서는 targets의 길이만큼 반복시켰고, tCnt 변수를 만들었다. 내부 for문에서는 targets의 각 원소의 길이만큼 반복해 줬고, ch에는 배열의 각 문자들을 넣어주고 click에는 map에서 그 키값에 해당하는 값을 가져와 넣어줬다. 만약 click이 null이 아니라면 tCnt에 click값을 넣어줬고, null값이라면 tCnt에 -1을 해주고 반복문을 종료시켰다. answer [i]에는 각 tCnt값을 넣어주고 answer을 반환하였다.

 

 

 

73. 덧칠하기

문제

class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 1;
        int start = section[0];
        int end = section[0] + (m-1);
        
        for(int i : section){
            if(i>=start && i<=end){
                continue;
            } else{
                start = i;
                end = i + (m-1);
                answer++;
            }
        }

        return answer;
    }
}

<작성한 코드>

answer은 1부터 시작하도록 했다. 시작점은 section의 첫번째원소를 기준으로 잡았고, 끝점은 롤러의 길이에서 1을 빼준 만큼을 끝점으로 잡았다. foreach문을 사용해서 section의 모든 원소들을 반복해서 사용하였고 만약 i가 시작점과 끝점의 사이에 있다면 넘어가도록 했다. 만약 사이에 존재하지 않는다면 시작점을 i로 바꾸고 end도 마찬가지로 i + (m-1)로 변경했다. 그 뒤 answer에 칠한 횟수를 1만큼 더해줬다. 이렇게 하면 롤러를 총 색칠한 횟수가 나온다.

반응형

+ Recent posts