[프로그래머스 | 파이썬 / 자바스크립트] 대충 만든 자판(연습문제/ level 1)

2023. 2. 28. 21:32·Problem Solving/프로그래머스
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/160586

 

프로그래머스

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

programmers.co.kr

 

 

🐍파이썬
def solution(keymap, targets):
    answer = [0] * len(targets)
    dic = {}
    for i in keymap:
        for j in i:
            if j in dic:	#keymap의 알파벳을 key로 하는 dict 원소가 존재한다면
                if dic[j] > i.index(j)+1:	#현재 인덱스보다 멀리 있는 키라면
                    dic[j] = i.index(j)+1	#현재 인덱스로 값 변경
            else:
                dic[j] = i.index(j)+1
    for i in range(len(targets)):
        for j in targets[i]:
            if j in dic:	#targets의 알파벳을 key로 하는 dict 원소가 존재한다면
                answer[i] += dic[j]	#키의 value값을 더해 터치수 늘리기
            else:	#targets의 알파벳을 key로 하는 dict 원소가 존재하지 않는다면
                answer[i] = -1	#-1을 넣어주고 종료
                break
    return answer

 

 

다른 풀이 방법

def solution(keymap, targets):
    answer = []
    #최솟값 저장
    alpha = [101 for i in range(26)]	#알파벳 개수만큼 배열 생성
    for i in keymap:
        for idx, j in enumerate(i):
            k = ord(j)-ord('A')	#알파벳 'A'와의 거리를 숫자로 저장
            alpha[k] = min(alpha[k],idx+1)	#현재 값, idx+1값 중 더 작은 값 저장(더 가까이 있는 키)
    for i in targets:
        total = 0
        for j in i:
            cnt = alpha[ord(j) - ord('A')]	#j와 알파벳 'A'의 거리를 기반으로 alpha 배열 값을 변수 cnt에 저장
            if cnt == 101:	#keymap에 존재하지 않는 알파벳일 경우
                answer.append(-1)
                break
            else:
                total += cnt
        else:	#for-else문: for문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행됐을 경우 else문 실행
            answer.append(total)
    return answer

💡 for-else문

for문이 break 등으로 중간에 빠져나오지 않고 끝까지 실행됐을 경우 else문 실행

 

 

🐥자바스크립트
function solution(keymap, targets) {
    var answer = Array(targets.length).fill(0);
    let dic = {};
    for(let i of keymap){
        for(let j of i){
            if(j in dic){   //keymap의 알파벳을 key로 하는 dict 원소가 존재한다면
                dic[j] = Math.min(dic[j], i.indexOf(j) + 1);    //현재 값, idx+1값 중 더 작은 값 저장(더 가까이 있는 키)
            } else {
                dic[j] = i.indexOf(j) + 1;
            }
        }
    }
    for(let i = 0; i < targets.length; i++){
        for(let j of targets[i]){
            if(j in dic){   //targets의 알파벳을 key로 하는 dict 원소가 존재한다면
                answer[i] += dic[j] //키의 value값을 더해 터치수 늘리기
            } else {    //targets의 알파벳을 key로 하는 dict 원소가 존재하지 않는다면
                answer[i] = -1; //-1을 넣어주고 종료
                break;
            }
        }
    }
    return answer;
}

 

 

다른 풀이 방법

function solution(keymap, targets) {
    const answer = [];
    const map = {}
    for (const items of keymap) {
        items.split('').map((item, index) => map[item] = (map[item] < index+1 ? map[item] : index+1))
    }
    for (const items of targets) {
        answer.push(items.split('').reduce((cur, item) => cur += map[item], 0) || -1)
    }
    return answer;
}

1️⃣ keymap의 원소들을 split()하여 각 알파벳과 인덱스 값+1을 dic에 저장한다. value 저장 시 더 작은 수를 저장한다.

2️⃣ target의 원소들을 split()하여 각 알파벳에 해당하는 인덱스값을 cur에 누적해 더한다. 끝으로 이 값을 answer 배열에 push해주는데, 알파벳에 해당되는 key가 dic에 존재하지 않는다면 결과는 undefined가 되고 이는 false로 취급되어 or 뒤의 값인 -1을 push 한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

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

[프로그래머스 | 파이썬 / 자바스크립트] 과일 장수(연습문제/ level 1)  (0) 2023.03.05
[프로그래머스 | 파이썬] 더 맵게(힙(Heap)/ level 2)  (0) 2023.03.03
[프로그래머스 | 파이썬 / 자바스크립트] 주차 요금 계산(2022 KAKAO BLIND RECRUITMENT/ level 2)  (0) 2023.03.03
[프로그래머스 | 파이썬 / 자바스크립트] [1차] 뉴스 클러스터링(2018 KAKAO BLIND RECRUITMENT/ level 2)  (0) 2023.02.28
[프로그래머스 | 파이썬 / 자바스크립트] 연속 부분 수열 합의 개수(연습문제/ level 2)  (0) 2023.02.28
[프로그래머스 | 파이썬 / 자바스크립트] 이진수 더하기(코딩테스트 입문/ level 0)  (0) 2023.02.28
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 | 파이썬] 더 맵게(힙(Heap)/ level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] 주차 요금 계산(2022 KAKAO BLIND RECRUITMENT/ level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] [1차] 뉴스 클러스터링(2018 KAKAO BLIND RECRUITMENT/ level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] 연속 부분 수열 합의 개수(연습문제/ level 2)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    spring boot
    플러터
    bfs
    리액트
    웹사이트
    d3
    컴퓨터네트워크
    Next.js
    React
    Til
    mysql
    Jiraynor Programming
    구현
    공식문서
    블로그 제작
    클론 프로젝트
    뉴렉처
    백준
    프로젝트
    강의내용정리
    자바스크립트
    ZeroCho
    포트폴리오
    AWS
    타입스크립트
    SWEA
    프로그래머스
    자바
    알고리즘
    파이썬
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[프로그래머스 | 파이썬 / 자바스크립트] 대충 만든 자판(연습문제/ level 1)
상단으로

티스토리툴바