(7) 프로그래머스 코딩테스트 Lv1 - 파이썬
by Holly Yoon26. 부족한 금액 계산하기(문제 링크)
- 문제 설명 : 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요.
- 제한사항 : 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수. 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수. 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수
#내 풀이
def solution(price, money, count):
for i in range(1,count+1) :
money -= price*i
if money >0 :
return 0
else :
return money*(-1)
- 절댓값으로 풀어도 된다.
def solution(price, money, count):
return abs(min(money - sum([price*i for i in range(1,count+1)]),0))
27. 행렬의 덧셈(문제 링크)
- 문제 설명 : 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
def solution(arr1, arr2):
n = len(arr1)
m = len(arr1[0])
result=[]
for x in range(n) :
row=[]
for y in range(m) :
row.append(arr1[x][y]+arr2[x][y])
result.append(row)
return result
- 같은 행끼리 분리하고, 같은 행에서 같은 열에 해당하는 값끼리 더해서 새로운 열에 넣어준다.
def solution(A,B):
answer = []
for a, b in zip(A, B):
l = []
for x, y in zip(a, b):
l.append(x + y)
answer.append(l)
return answer
#간결하게
def solution(A,B):
answer = [[x+y for x, y in zip(a,b)] for a,b in zip(A,B)]
return answer
- zip()을 이용해서 풀어줄 수 있다.
28. 직사각형 별찍기(문제 링크)
a, b = map(int, input().split(' '))
for b in range(b):
print(a*'*')
- '\n'은 줄바꿈을 해준다
a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)
29. 최대공약수 최소공배수(문제 링크)
문제 설명 : 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
def solution(n, m):
result=[]
for i in range(1,max(n,m)+1):
if (n%i==0) and (m%i==0):
result.append(i)
return max(result), n*m//max(result)
- 유클리드 호제법을 이용할 수도 있다. 자세한 블로그 글
- 큰 수에서 작은 수를 나누고 나머지가 있을 경우, 이전에 나눠준 수를 다시 나머지로 나눠준다.
- 마침내 나머지가 없을 때가 나오면, 마지막 나눈 수가 최대 공약수가 된다.
30. 같은 숫자는 싫어(문제 링크)
- 문제 설명 : 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다.
def solution(arr):
i = 0
while i < len(arr):
if arr[i] == arr[i-1]:
del arr[i]
else:
i += 1
return arr
- 반복문 쓰니까 runtime error 떠서,, 아래와 같이 작성했다.
def solution(arr):
result=[]
result.append(arr[0])
for i in range(1,len(arr)):
if arr[i]!=arr[i-1]:
result.append(arr[i])
return result
- 조건문을 새로운 리스트 기준으로 [-1:] 추가해주는 것과 비교해서 추가해주는 방법도...있다. 짱짱
#다른 풀이
def no_continuous(s):
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
'Python' 카테고리의 다른 글
(8) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.17 |
---|---|
파이썬 복습 - Unpack/예외처리 (0) | 2023.01.08 |
(6) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.07 |
(5) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.03 |
(4) 프로그래머스 코딩테스트 Lv1 - 파이썬 (0) | 2023.01.02 |
블로그의 정보
Study Log by Holly
Holly Yoon