Algorithm/프로그래머스

[Lv.0/Python] 수 조작하기 1

chocoji 2023. 11. 26. 22:50

문제

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

정수 `n`과 문자열 `control`이 주어집니다. `control`은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, `control`의 앞에서부터 순서대로 문자에 따라 `n`의 값을 바꿉니다.

  • "w" : `n`이 1 커집니다.
  • "s" : `n`이 1 작아집니다.
  • "d" : `n`이 10 커집니다.
  • "a" : `n`이 10 작아집니다.

위 규칙에 따라 `n`을 바꿨을 때 가장 마지막에 나오는 `n`의 값을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • -100,000≤ `n` ≤ 100,000 
  • 1 ≤ `control`의 길이 ≤ 100,000
    • `control`은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

입출력 예

n control result
0 "wsdawsdassw" -1

 

 

Code

def solution(n, control):
    n += control.count("w")
    n -= control.count("s")
    n += 10 * control.count("d")
    n -= 10 * control.count("a")
    
    return n

각 이동 명령어의 개수에 따른 이동량을 계산함

 

프로그래머스 다른 사람 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/181926/solution_groups?language=python3

 

프로그래머스

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

programmers.co.kr

def solution(n, control):
    key = dict(zip(['w','s','d','a'], [1,-1,10,-10]))
    return n + sum([key[c] for c in control])
  • `zip()`을 이용하여 각 명령어와 이동량을 정의한 딕셔너리 `key()` 생성
  • 리스트 컴프리헨션을 사용하여 각 명령어에 대응하는 이동량을 리스트로 생성한 뒤, 이를 모두 더하여 `n`에 합하여 반환함