(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은 다 끝내야지!
'Python' 카테고리의 다른 글
Seaborn 튜토리얼 공부(1) (0) | 2023.02.02 |
---|---|
[TIL] 230131 파이썬 데이터시각화(1) (1) | 2023.02.01 |
파이썬 복습 - Unpack/예외처리 (0) | 2023.01.08 |
(7) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.08 |
(6) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.07 |
블로그의 정보
Study Log by Holly
Holly Yoon