본문 바로가기
알고리즘/PROGRAMMERS

대충 만든 자판(Lv.1)

by 현대타운301 2024. 4. 11.

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

주어진 keymap의 문자열에 들어있는 문자들을 최대한 적게 눌러서 targets에 있는 단어 만들기

 


 

풀이

 

접근 방식

1. targets의 문자열을 이루고 있는 문자를 하나씩 keymap에서 조사

  → .indexOf() 메소드로 주어진 keymap을 모두 조사해 최소값을 찾는다.

 

2. keymap에 없는 문자를 포함하는 경우 -1을 return

  → 스트림의 최종 처리 기능인 .orElse() 메소드를 통해 -1을 리턴

 


 

코드리뷰

 

import java.util.*;

public class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < targets.length; i++) {
            int min = 0;
            int index = 0;
            for(int j = 0; j < targets[i].length(); j++) {
                char c = targets[i].charAt(j);	// targets의 첫 번째 문자열의 첫 번째 문자부터 조사 시작
                index = Arrays.stream(keymap)	// keymap으로 스트림 생성
                              .mapToInt(s -> s.indexOf(c))	// String -> int 형변환
                              .filter(s -> s >= 0)	// indexOf()의 결과가 0 이상인 경우만 필터링
                              .min()	// 필터링된 스트림을 순회하며 최소값 찾기
                              .orElse(-1);	// .min()은 Optional 타입이기 때문에 .orElse()를 통해 못 찾는 경우 -1로 고정
                min += index + 1;	// index는 0부터 시작하기 때문에 +1
                if(index == -1) break;	// 만들지 못하는 문자열의 경우 break
            }
            if(index == -1) list.add(-1);	// 만들 수 없는 문자열의 경우 -1 저장
            else list.add(min);	// 만들 수 있으면 최소값 저장
        }
        return list.stream().mapToInt(s -> s).toArray();
    }
}

 

 

 

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

줄 서는 방법(Lv.2)  (0) 2024.04.15
배달(Lv.2)  (0) 2024.04.11
상품을 구매한 회원 비율 구하기(DB)  (1) 2024.03.28
n진수 게임(Lv.2)  (1) 2024.03.28
게임 맵 최단거리(Lv.2)  (0) 2024.03.27