πŸ”₯[99클럽 μ½”ν…Œ μŠ€ν„°λ””] 24일차 TIL - λŒ€μΆ© λ§Œλ“  자판

HOONSSACΒ·2024λ…„ 8μ›” 14일
1

99Club Coding Test Study

λͺ©λ‘ 보기
24/41
post-thumbnail
post-custom-banner

⏳문제

νœ΄λŒ€ν°μ˜ μžνŒμ€ 컴퓨터 ν‚€λ³΄λ“œ μžνŒκ³ΌλŠ” λ‹€λ₯΄κ²Œ ν•˜λ‚˜μ˜ 킀에 μ—¬λŸ¬ 개의 λ¬Έμžκ°€ 할당될 수 μžˆμŠ΅λ‹ˆλ‹€. ν‚€ ν•˜λ‚˜μ— μ—¬λŸ¬ λ¬Έμžκ°€ ν• λ‹Ήλœ 경우, λ™μΌν•œ ν‚€λ₯Ό μ—°μ†ν•΄μ„œ λΉ λ₯΄κ²Œ λˆ„λ₯΄λ©΄ ν• λ‹Ήλœ μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ λ°”λ€λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 1번 킀에 "A", "B", "C" μˆœμ„œλŒ€λ‘œ λ¬Έμžκ°€ ν• λ‹Ήλ˜μ–΄ μžˆλ‹€λ©΄ 1번 ν‚€λ₯Ό ν•œ 번 λˆ„λ₯΄λ©΄ "A", 두 번 λˆ„λ₯΄λ©΄ "B", μ„Έ 번 λˆ„λ₯΄λ©΄ "C"κ°€ λ˜λŠ” μ‹μž…λ‹ˆλ‹€.

같은 κ·œμΉ™μ„ μ μš©ν•΄ μ•„λ¬΄λ ‡κ²Œλ‚˜ λ§Œλ“  νœ΄λŒ€ν° 자판이 μžˆμŠ΅λ‹ˆλ‹€. 이 νœ΄λŒ€ν° μžνŒμ€ ν‚€μ˜ κ°œμˆ˜κ°€ 1κ°œλΆ€ν„° μ΅œλŒ€ 100κ°œκΉŒμ§€ μžˆμ„ 수 있으며, νŠΉμ • ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ μž…λ ₯λ˜λŠ” λ¬Έμžλ“€λ„ λ¬΄μž‘μœ„λ‘œ λ°°μ—΄λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 또, 같은 λ¬Έμžκ°€ 자판 전체에 μ—¬λŸ¬ 번 ν• λ‹Ήλœ κ²½μš°λ„ 있고, ν‚€ ν•˜λ‚˜μ— 같은 λ¬Έμžκ°€ μ—¬λŸ¬ 번 ν• λ‹Ήλœ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. 심지어 μ•„μ˜ˆ ν• λ‹Ήλ˜μ§€ μ•Šμ€ κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λͺ‡λͺ‡ λ¬Έμžμ—΄μ€ μž‘μ„±ν•  수 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이 νœ΄λŒ€ν° μžνŒμ„ μ΄μš©ν•΄ νŠΉμ • λ¬Έμžμ—΄μ„ μž‘μ„±ν•  λ•Œ, ν‚€λ₯Ό μ΅œμ†Œ λͺ‡ 번 λˆŒλŸ¬μ•Ό κ·Έ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•©λ‹ˆλ‹€.

1번 ν‚€λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν• λ‹Ήλœ λ¬Έμžλ“€μ΄ μˆœμ„œλŒ€λ‘œ λ‹΄κΈ΄ λ¬Έμžμ—΄λ°°μ—΄ keymapκ³Ό μž…λ ₯ν•˜λ €λŠ” λ¬Έμžμ—΄λ“€μ΄ λ‹΄κΈ΄ λ¬Έμžμ—΄ λ°°μ—΄ targetsκ°€ μ£Όμ–΄μ§ˆ λ•Œ, 각 λ¬Έμžμ—΄μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ ν‚€λ₯Ό μ΅œμ†Œ λͺ‡ λ²ˆμ”© λˆŒλŸ¬μ•Ό ν•˜λŠ”μ§€ μˆœμ„œλŒ€λ‘œ 배열에 λ‹΄μ•„ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

단, λͺ©ν‘œ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 없을 λ•ŒλŠ” -1을 μ €μž₯ν•©λ‹ˆλ‹€.

πŸš¨μ œν•œ 사항

  • 1 ≀ keymap의 길이 ≀ 100
  • 1 ≀ keymap의 μ›μ†Œμ˜ 길이 ≀ 100
  • keymap[i]λŠ” i + 1번 ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ μˆœμ„œλŒ€λ‘œ λ°”λ€ŒλŠ” 문자λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄ keymap[0] = "ABACD" 인 경우 1번 ν‚€λ₯Ό ν•œ 번 λˆ„λ₯΄λ©΄ A, 두 번 λˆ„λ₯΄λ©΄ B, μ„Έ 번 λˆ„λ₯΄λ©΄ A κ°€ λ©λ‹ˆλ‹€.
  • keymap의 μ›μ†Œμ˜ κΈΈμ΄λŠ” μ„œλ‘œ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • keymap의 μ›μ†ŒλŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • 1 ≀ targets의 길이 ≀ 100
  • 1 ≀ targets의 μ›μ†Œμ˜ 길이 ≀ 100
  • targets의 μ›μ†ŒλŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ƒμž…μΆœλ ₯ 예

keymaptargetsresult
["ABACD", "BCEFD"]["ABCD","AABB"][9, 4]
["AA"]["B"][-1]
["AGZ", "BSSS"]["ASA","BGZ"][4, 6]

πŸ“ƒμž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1

  • "ABCD"의 경우,
  • 1번 ν‚€ ν•œ 번 β†’ A
  • 2번 ν‚€ ν•œ 번 β†’ B
  • 2번 ν‚€ 두 번 β†’ C
  • 1번 ν‚€ λ‹€μ„― 번 β†’ D
  • λ”°λΌμ„œ 총합인 9λ₯Ό 첫 번째 μΈλ±μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • "AABB"의 경우,
  • 1번 ν‚€ ν•œ 번 β†’ A
  • 1번 ν‚€ ν•œ 번 β†’ A
  • 2번 ν‚€ ν•œ 번 β†’ B
  • 2번 ν‚€ ν•œ 번 β†’ B
  • λ”°λΌμ„œ 총합인 4λ₯Ό 두 번째 μΈλ±μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • 결과적으둜 [9,4]λ₯Ό return ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

  • "B"의 경우, 'B'κ°€ 어디에도 μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— -1을 첫 번째 μΈλ±μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • 결과적으둜 [-1]을 return ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #3

  • "ASA"의 경우,
  • 1번 ν‚€ ν•œ 번 β†’ A
  • 2번 ν‚€ 두 번 β†’ S
  • 1번 ν‚€ ν•œ 번 β†’ A
  • λ”°λΌμ„œ 총합인 4λ₯Ό 첫 번째 μΈλ±μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • "BGZ"의 경우,
  • 2번 ν‚€ ν•œ 번 β†’ B
  • 1번 ν‚€ 두 번 β†’ G
  • 1번 ν‚€ μ„Έ 번 β†’ Z
  • λ”°λΌμ„œ 총합인 6을 두 번째 μΈλ±μŠ€μ— μ €μž₯ν•©λ‹ˆλ‹€.
  • 결과적으둜 [4, 6]을 return ν•©λ‹ˆλ‹€.

βœοΈν’€μ΄

keymapκ³Ό targets배열을 μˆœνšŒν•˜λ©΄μ„œ 문자λ₯Ό ν•˜λ‚˜μ”© μΆ”μΆœν•˜κΈ° μœ„ν•΄, for문을 μ—¬λŸ¬ 번 μ‚¬μš©ν•˜μ˜€λ‹€.

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];
        for (char c : target.toCharArray()) {
            int minIndex = 100;
            for (String key : keymap) {
                int index = key.indexOf(c);
                if (index != -1 && index < minIndex) {
                    minIndex = index;
                }
            }
            answer[i] += minIndex + 1;
        }
    }
    return answer;
}

μš°μ„ , String λ³€μˆ˜ targetμ—λŠ” ν˜„μž¬ ν‚€λ³΄λ“œ 자판으둜 λ§Œλ“€μ–΄μ•Ό ν•  λ¬Έμžμ—΄μ„ λ‹΄μ•„μ£Όμ—ˆλ‹€.
그리고, λ¬Έμžμ—΄ targetμ—μ„œ 문자λ₯Ό ν•˜λ‚˜μ”© μΆ”μΆœν•˜κ³ , keymapμ—μ„œ 각 λ²„νŠΌμ„ μˆœνšŒν•˜λ©΄μ„œ λˆŒλŸ¬μ„œ μž…λ ₯ν•΄μ•Ό ν•  λ¬Έμžκ°€ λ²„νŠΌμ˜ λͺ‡ λ²ˆμ§Έμ— μžˆλŠ” 지 κ΅¬ν•΄μ£Όμ—ˆλ‹€.
이 λ•Œ indexOf()ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ c와 μΌμΉ˜ν•˜λŠ” λ¬Έμžκ°€ λ²„νŠΌ key이 λͺ‡ 번째 μΈλ±μŠ€μ— μžˆλŠ” 지 κ΅¬ν•˜κ³ , indexκ°€ μ΅œμ†Œκ°€ λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, 쑰건문을 톡해 minIndex에 λ²„νŠΌμ„ λˆŒλŸ¬μ•Ό ν•˜λŠ” μ΅œμ†Œ 횟수λ₯Ό μ €μž₯ν•΄μ£Όμ—ˆλ‹€.

λ²„νŠΌμ„ λˆ„λ₯΄λŠ” νšŸμˆ˜λŠ” μΈλ±μŠ€μ— 1을 더해주어야 ν•˜κΈ° λ•Œλ¬Έμ—, answer배열에 μ €μž₯ν•  λ•Œ minIndex에 1을 더해 μ €μž₯ν•΄ μ£Όμ—ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ©΄, λ²„νŠΌμœΌλ‘œ μž…λ ₯ν•˜κ³ μž ν•˜λŠ” λ¬Έμžμ—΄μ„ 무쑰건 μž…λ ₯ν•  수 μžˆλ‹€λŠ” 쑰건으둜 정닡을 ꡬ할 수 μžˆλ‹€.

이제 λͺ©ν‘œ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 없을 λ•Œ -1을 μ €μž₯ν•˜λ„λ‘ μ½”λ“œλ₯Ό μΆ”κ°€ν•΄μ•Ό ν•œλ‹€.

πŸš¨μ˜ˆμ™Έ 사항 μΆ”κ°€

λͺ©ν‘œ λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수 μ—†λŠ” 경우λ₯Ό κ³ λ €ν•˜κΈ° μœ„ν•΄, answer에 λ²„νŠΌ λˆ„λ₯Έ 횟수λ₯Ό μ €μž₯ν•  λ•Œ 쑰건문을 μΆ”κ°€ν•΄ μ£Όμ—ˆλ‹€.

if (minIndex < 100 && answer[i] != -1) {
	answer[i] += minIndex + 1;
}
else {
    answer[i] = -1;
}

μ›ν•˜λŠ” 문자λ₯Ό keyμ—μ„œ λͺ»μ°Ύμ•˜μ„ λ•Œ minIndexμ—λŠ” 값이 μ €μž₯λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, minIndexλŠ” μ΄ˆκΈ°ν™” 값인 100이 μ €μž₯λ˜μ–΄ μžˆμ„ 것이닀.
λ°˜λŒ€λ‘œ 문자λ₯Ό keyμ—μ„œ μ°Ύμ•˜μ„ κ²½μš°μ—λŠ” minIndexκ°€ 무쑰건 100보닀 μž‘μ„ 것이닀.

λ”°λΌμ„œ ν•΄λ‹Ή 쑰건에 따라 μ›ν•˜λŠ” 문자λ₯Ό μ°Ύμ•˜μ„ κ²½μš°μ—λŠ” 기쑴의 μ½”λ“œλŒ€λ‘œ μ§„ν–‰λ˜λ„λ‘ ν•΄μ£Όμ—ˆκ³ ,
문자λ₯Ό 찾지 λͺ»ν–ˆμ„ κ²½μš°μ—λŠ” -1이 μ €μž₯λ˜λ„λ‘ μ½”λ“œλ₯Ό μΆ”κ°€ν•΄ μ£Όμ—ˆλ‹€.

πŸ‘Ύμ΅œμ’… μ½”λ“œ

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];
            for (char c : target.toCharArray()) {
                int minIndex = 100;
                for (String key : keymap) {
                    int index = key.indexOf(c);
                    if (index != -1 && index < minIndex) {
                        minIndex = index;
                    }
                }
                if (minIndex < 100 && answer[i] != -1) {
                    answer[i] += minIndex + 1;
                }
                else {
                    answer[i] = -1;
                }
            }
        }
        return answer;
    }
}


πŸ”—λ¬Έμ œ 링크
πŸ’»Repository

profile
ν›ˆμ‹Ήμ˜ κ°œλ°œμ—¬ν–‰
post-custom-banner

1개의 λŒ“κΈ€

comment-user-thumbnail
2024λ…„ 8μ›” 15일

타λ‹₯타λ‹₯ 타닀끼(?)

λ‹΅κΈ€ 달기