https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 타겟 문자를 하나씩 순회
2. 타겟 문자의 각 글자를 입력할 때, 키맵들 중 가장 적은 횟수로 입력 가능한 횟수를 저장한다.
3. 만약 어느 키맵에서도 그 단어를 만들수가 없다면, 타켓 문자 자체를 못 만들기 때문에 -1을 저장한다.
4. 타겟 문자의 각 글자를 키맵들을 사용해 만들 수 있는 최소 횟수를 구한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length]; // 답을 저장할 배열의 크기를 미리 지정한다.
for(int i=0; i<targets.length; i++) {
String target = targets[i]; // targets 배열 안의 문자열을 하나씩 순회
int sum = 0; // 문자열의 각 문자마다 자판을 누른 횟수를 합산할 변수를 선언
for(int j=0; j<target.length(); j++) {
int e = -1; // 자판을 누른 횟수
char ch = target.charAt(j);
for(String s : keymap) {
int idx = s.indexOf(String.valueOf(ch));
if(idx != -1) { // 자판으로 작성할 문자가 자판에 존재하는 경우
if(e == -1) e = idx + 1; // e 값에 -1이 아닌 자판에 존재하는 위치를 저장함
else if(e > idx + 1) e = idx + 1; // 다른 자판에서 더 적은 횟수로 입력이 가능한 경우
}
}
if(e == -1) { // 해당 문자를 자판으로 작성할 수 없으면 그 단어 자체는 성립할 수 없으니 현재 반복문 종료
sum = -1;
break;
}
sum += e;
}
if(sum > 0) answer[i] = sum; // sum이 양수인 경우 자판의 합을 저장
else answer[i] = -1; // 음수인 경우 -1를 저장
}
return answer;
}
}
|
cs |
'Programmers > Lv.1' 카테고리의 다른 글
프로그래머스 Lv.1 - 카드 뭉치 (0) | 2023.09.17 |
---|---|
프로그래머스 Lv.1 - 문자열 나누기 (0) | 2023.09.16 |
프로그래머스 Lv.1 - 소수 찾기 (0) | 2023.09.16 |
프로그래머스 Lv.1 - 기사단원의 무기 (0) | 2023.09.16 |
프로그래머스 Lv.1 - 둘만의 암호 (0) | 2023.07.24 |