RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚

이상한 나라의 개발자

Algorithm/프로그래머스

[프로그래머스 > Lv1] 대충 만든 자판

2023. 3. 4. 14:26
728x90
반응형
 

프로그래머스

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

programmers.co.kr

 

1. 문제

휴대폰 자판을 이용해 특정 문자열을 작성할 때, 키를 최소 몇 번 눌러야 그 문자열을 작성할 수 있는지 알아보고자 합니다.

 

[입력]

  • 1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열 배열 keymap
  • 입력하려는 문자열들이 담긴 문자열 배열 targets

 

[출력]

각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return

 

2. 풀이

예제 입출력과 해설을 보게된다면 target의 각 문자를 입력할 때 자판의 처음부터 시작해 해당 알파벳을 찾는 것을 알 수 있습니다.

 

이를 이용해서 각 keymap들을 순회하며, 특정 알파벳을 입력할 때의 최소 클릭 횟수를 먼저 찾을 필요가 있습니다.

alphabet = {}
def solution(keymap, targets):
    answer = []
    
    for key in keymap:
        for i, s in enumerate(key):
            if s in alphabet:
                alphabet[s] = min(alphabet[s], i+1)
            else:
                alphabet[s] = i+1

 

이렇게 각 알파벳을 입력할 때 필요한 최소 클릭 횟수를 구했으니, 이제 target들을 순회하며, 최소 클릭 횟수들을 더해주기만 하면 됩니다.

🌹 이 때, target의 특정 알파벳이 keymap(즉, 위 코드의 alphabet)에 존재하지 않을 때는 -1을 반환해주어야 함에 유의하세요.

 

3. 코드

Python
alphabet = {}
def solution(keymap, targets):
    answer = []
    
    for key in keymap:
        for i, s in enumerate(key):
            if s in alphabet:
                alphabet[s] = min(alphabet[s], i+1)
            else:
                alphabet[s] = i+1
    
    for target in targets:
        count = 0
        for s in target:
            if s not in alphabet:
                count = -1
                break
            else:
                count += alphabet[s]
        answer.append(count)
    return answer

 

반응형

'Algorithm > 프로그래머스' 카테고리의 다른 글

[프로그래머스 > Lv3] 연속 펄스 부분 수열의 합  (0) 2023.03.05
[프로그래머스 > Lv1] 바탕화면 정리  (0) 2023.03.04
[프로그래머스 > Lv2] 덧칠하기  (0) 2023.03.04
[프로그래머스 > Lv2] 혼자서 하는 틱택토  (0) 2023.03.03
[프로그래머스 > Lv2] 미로탈출  (0) 2023.02.16
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [프로그래머스 > Lv3] 연속 펄스 부분 수열의 합
    • [프로그래머스 > Lv1] 바탕화면 정리
    • [프로그래머스 > Lv2] 덧칠하기
    • [프로그래머스 > Lv2] 혼자서 하는 틱택토
    RIEN😚
    RIEN😚
    안드로이드 / 코틀린 독학으로 취업하자!

    티스토리툴바