728x90
[프로그래머스][Python][Lv0] 코딩테스트 입문 (3)
1. 영어가 싫어요
영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열
numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
def solution(numbers):
nums = ['zero','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
for idx, num in enumerate(nums):
numbers = numbers.replace(num, str(idx))
return int(numbers)
2. 구슬을 나누는 경우의 수
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
2-1. factorial 함수 생성
def factorial(nums):
num = 1
for i in range(1, nums+1):
num *= i
return num
def solution(balls, share):
n = factorial(balls)
m = factorial(share)
a = factorial((balls-share))
return n//(m*a)
2-2. math 라이브러리 사용
import math
def solution(balls, share):
return math.comb(balls, share)
3. 삼각형의 완성 조건 (2)
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요.
완전 복잡하게 푼 경우 😂
def solution(sides):
sides = sorted(sides)
result = 0
length = sides[1]+1
lst = []
#sides[0]의 길이가 가장 긴 경우
if sides[0] != sides[1]:
for i in range(1, sides[1]):
if sides[0] + i >= sides[1]:
result += 1
#sides[0]와 sides[1]의 길이가 같은 경우
elif sides[0] == sides[1]:
for i in range(1, length):
if sides[0] + i >= sides[1]:
result += 1
#new line의 길이가 가장 긴 경우
while sum(sides) > length:
lst.append(length)
length += 1
return result + len(lst)
다른 사람의 풀이
def solution(sides):
return sum(sides) - max(sides) + min(sides) - 1
n의 길이가 가장 길지 않은 경우의 조건 (max(sides) < min(sides) + n)과
n이 가장 긴 조건( sum(sides) > n)을 둘 다 만족하는 n의 개수를 구하는 방식
def solution(sides):
return 2 * min(sides) - 1
기존에 있던 변이 a, b (a>b) 라고 가정했을 때, 새로 입력 받는 c가 a보다 클수도있고 작을수도 있다.
- c>a 일 경우 c > a > b가 되고, a+b > c ==> a + b > c > a 가 되므로 c = b-1
- c<a 일 경우 a > b, a > c가 되고, b+c > a => b+c > a >c 가 되므로 c = b-1
- c=a 일 경우 c=a 한 가지만 존재
즉, (b-1)*(b-1)+1 = 2 * (b-1) 이 된다. 초기 조건에 의해 a > b 이므로 min으로 b값을 찾는다.
참고 : https://tnsgh9603.tistory.com/137
4. 외계어 사전
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가
dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
for문을 돌때마다 정렬을 해줘야하기 때문에 좋지 않은 코드😢
def solution(spell, dic):
spell = sorted(spell)
for i in dic:
if spell == sorted(i):
return 1
return 2
아래는 다른 사람의 풀이, 집합을 활용하여 순서또한 같이 정렬한다
다만 중복된 원소가 있을 경우 제대로된 풀이가 안될 것
5. 직사각형 넓이 구하기
2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.
좌표 평면에서 직사각형의 넓이를 구하기 위한 방법은 다음과 같다.
(x에서 가장 긴 길이 - x에서 가장 짧은 길이) * (y에서 제일 긴 길이 - y에서 가장 짧은 길이)
위 공식을 파이썬 코드로 풀어내면 다음과 같은 로직으로 구현할 수 있다.
def solution(dots):
x, y = [], []
for width, length in dots:
x.append(width)
y.append(length)
return (max(x)-min(x)) * (max(y)-min(y))
6. 로그인 성공?
머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.
아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.
로그인이 실패했을 때 아이디가 일치하는 회원이 없다면 “fail”를,
아이디는 일치하지만 비밀번호가 일치하는 회원이 없다면 “wrong pw”를 return 합니다.
def solution(id_pw, db):
lst = [[i, pw] for i, pw in db if i == id_pw[0]]
if len(lst) > 0:
return 'login' if id_pw == lst[0] else 'wrong pw'
else:
return 'fail'
- db 중 id가 같은 경우만 새로운 리스트로 저장해서 만약 값이 없으면 아이디가 없다는 뜻이기때문에 fail을 리턴
- 리스트에 값이 있는 경우 id_pw와 새 리스트가 같으면 아이디, 패스워드가 다 같다는 뜻이기때문에 login을 리턴
- 그렇지 않으면 wrong pw를 반환
7. 등수 매기기
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.
중복된 인덱스가 있을 경우 앞의 인덱스를 먼저 조회하기때문에, 중복값도 같은 인덱스가 조회됨
def solution(score):
score = [(x+y)/2 for x,y in score]
score2 = sorted(score, reverse=True)
return [score2.index(i)+1 for i in score]
8. 치킨 쿠폰
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
def solution(chicken):
answer = (max(chicken,1)-1)//9
return answer
반응형
'🧾 Codetest > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python][Lv0] 코딩테스트 입문 (5) (1) | 2023.09.14 |
---|---|
[프로그래머스][Python][Lv0] 코딩테스트 입문 (4) (1) | 2023.09.08 |
[프로그래머스][Python][Lv0] 코딩테스트 입문 (2) (0) | 2023.09.04 |
[프로그래머스][Python][Lv0] 코딩테스트 입문 (1) (0) | 2023.09.02 |
[프로그래머스][Python][Lv0] 코딩 기초 트레이닝 (3) (1) | 2023.08.28 |