Today I Learned

(8) 프로그래머스 코딩테스트 Lv1 - 파이썬

by Holly Yoon

이상한 문자 만들기(문제 링크)

  • 문제 : 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
  • 풀이 : 
    • split() : 빈칸 기준으로 단어를 쪼개서 list에 넣어부자
    • upper()/lower() : for문으로 넣어진 string의 index값을 비교해서 대소문자를 만들어주자
def solution(s):
    result = ''
    answers = s.split(' ')
    for answer in answers:
        for i in range(len(answer)):
            if i%2 ==0:
                result += answer[i].upper()
            else:
                result += answer[i].lower()
        result += ' '
    return result[0:-1]
  • 다른 풀이 :
    • map(함수, 빈칸 쪼개서 넣어주기)
    • 함수 lambda x는 조건문 써서 upper, lower해주고 ''.join으로 묶기
    • 최종 적으로 ' '.join으로 묶기
def solution(s):
	return ' '.join(map(lambda x:'',join([a.lower() if i%2 else a.upper() for i,a in enumerate(x)]),s.split(' ')))

3진법 뒤집기(문제 링크)

  • 문제 : 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
  • 풀이 : 3진법으로 변경하는 방법은 (1)3으로 나눈 나머지를 받고 (2)몫을 다시 3으로 나눈다 (3)해당 과정을 3으로 더 이상 나눠지지 않을 때까지 반복하고 완성된 숫자를 뒤집어준다.
def solution(n):
    result=[]
    answer=0
    while n>0:
        result.append(n%3)
        n=n//3
    for i in range(1,len(result)+1):
        answer += result[-i]*3**(i-1)
    return answer
  • 다른 풀이 :
    • str 변수를 선언하고 차곡차곡 더해주기
    • int(숫자형 문자,3) : 3진수로 바꾸기
def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

숫자 문자열과 영단어(문제 링크)

  • 문제 : 오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight", 234567 → "23four5six7", 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
  • 풀이 : 헤맷다.. list나 dic으로 숫자표를 바꿔주고 replace()로 각각을 바꿔주면 된다. 
def solution(s):
    answer = 0
    digit = {'zero':'0', 'one':'1', 'two':'2', 'three':'3', 'four':'4', 'five':'5', 'six':'6', 'seven':'7', 'eight':'8', 'nine':'9'}
    for i in digit.items():
        s = s.replace(i, str(digit[i])
    return int(s)  
                      
                                  
def solution(s):
    answer = 0
    a = ['zero', 'one', 'two', 'three', 'four',
         'five', 'six', 'seven', 'eight', 'nine']
    for i in a:
        s = s.replace(i, a.index(i))
    return int(s)

예산(문제 링크)

  • 문제 : S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
  • 제한사항 : d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다. d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다. budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.
def solution(d, budget):
    sort_d = sorted(d)
    answer = 0
    for i in sort_d:
        budget -= i
        if budget < 0:
            break
        answer += 1
    return answer

 

***

오랫만에 프로그래머스 문풀~ 설까지 Lv1은 다 끝내야지!

블로그의 정보

Study Log by Holly

Holly Yoon

활동하기