본문 바로가기

PYTHON91

프로그래머스 Lv2 구명보트 (python) 구명보트 풀이 보고나서 머리로는 어떻게 풀어야겠다 생각되었으나, 코드로 어떻게 해야할지 고민이 되었다. 우선 생각한대로 풀이는 1. 받은 인원을 무게 내림차순으로 정렬한다. 2. 보트를 타야하는데 남은 사람 중 가장 무거운 사람과 가장 가벼운 사람을 태운다. 2-1. 이 때 가장 무거운 사람+ 가벼운 사람 무게가 무게 제한에 걸리면 무거운 사람만 태운다. 3. 다시 2를 반복한다. 4. 2번을 반복한 횟수를 출력한다. 여기서 2번을 구현하려는데 for문을 안될 것 같고, while문을 이용해서 i와 j 인덱스 2개를 사용했다. 이렇게 가장 무거운 쪽에서 그리고 가장 가벼운 쪽에서 각각 진출할 수 있게 만들었다. # 무게 제한과 최대 2명 # 최대한 적게 사용해 모든 사람 구출 # 몇 번 사용했는지 반환 .. 2024. 1. 30.
프로그래머스 Lv1 부족한 금액 계산하기 (python) 부족한 금액 계산하기 풀이 한 번 탈 때마다 price 요금을 더 내야 하는 이상한 놀이기구이다. 얼마나 인기가 많으면 이렇게 배짱장사를 할까... 간단하게 풀어진다. 반복문을 돌리면서 count만큼 탔을 때의 비용을 계산한다. 내가 들고 있는 돈과 비용을 계산하고 그에 따른 답을 반환한다. # price원 -> N번째시 price * N def solution(price, money, count): i = 0 whole_price = 0 while i money: return whole_price - money else: return 0 다른 사람 풀이 max()함수를 사용하고 또한, 수학적으로 값을 계산.. 2024. 1. 30.
프로그래머스 Lv2 예상 대진표 (python) 예상 대진표 풀이 처음에는 a와 b의 거리 차이로 풀려고 생각을 했어서 아래처럼 풀었다. def solution(n,a,b): answer = 0 value1, value2 = (a-1)//2, (b-1)//2 quotient = 1 for i in range(1, 21): if 2**i == n: quotient = i break if abs(value1-value2) + 1 > quotient: return quotient else: return abs(value1-value2) + 1 하지만 이러니 추가 테스트케이스로 8, 4, 5, 1의 경우에 틀리게 되어서 이 방법은 폐기하였다. 그래서 다른 방법을 시도하였다. 경기를 몇 번 뛰었는지를 확인하면 되는 것이기에 처음에 대진자와의 짝을 맞춰주기 위해.. 2024. 1. 30.
프로그래머스 Lv2 JadenCase 문자열 만들기 (python) JadenCase 문자열 만들기 풀이 처음에는 간단하게 title()을 쓸까 했지만 문제에서 숫자 다음은 그냥 소문자로 이어지도록하라 했기에 쓸 수 없었다. 그리고 다른 방법으로 capitalize()를 아래처럼 사용해봤다. def solution(s): s_list = list(map(str, s.split())) for i in range(len(s_list)): s_list[i] = s_list[i].capitalize() return ' '.join(s_list) 하지만 위의 방법도 결국 제한 조건에서 '공백문자가 연속해서 나올 수 있습니다.'라는 조건으로 인해 예시로 "for the last week"의 경우에는 해결할 수 없었다. 결국 조금 코드가 길어지긴 하지만 아래의 방법을 사용했다. 문자.. 2024. 1. 30.
프로그래머스 Lv2 올바른 괄호 (python) 올바른 괄호 풀이 문제 유형도 스택/큐 로 되어있었고, 문제를 푸는 방법도 스택이 편하기에 스택을 이용한 방법으로 풀었다. 1. stack을 만들어둠 2. 열린괄호 '('면 stack에 넣고, 닫힌 괄호 ')'면 stack에서 열린괄호'('를 빼는데, 이때 stack이 비어있으면 False 반환 3. 문자열을 끝까지 확인후 stack에 값이 남아있으면, 짝이 맞지 않는 경우이니, False를 반환 4. 이외의 상황은 True 반환 # ( 가 하나 있으면 )도 하나 있어야함. # 하지만 )( 는 안되고 () 순이어야함. # 스택을 이용해보자 # 스택에는 ( 만을 넣고 반복문을 돌리면서 )게 나온다면, 에서 확인하기 def solution(s): stack = [] for i in range(len(s)):.. 2024. 1. 29.
python divmod() 사용하기 나누기 연산 나누기 연산을 할 경우 보통 일반 나누기는 10 / 2# 5.0 로 / 연산자를 이용해서 나눈다. 그리고 몫이 필요한 연산이 필요하다면 10 // 2# 5 로 // 연산자를 이용한다. 또한 나머지가 필요한 연산이 필요하다면 10 % 2 # 0 % 연산자를 이용한다 알고리즘 문제를 풀다보면 단순 나누기를 사용해야할 경우도 많지만, 몫만 필요하거나, 나머지만 필요하거나 또는 몫과 나머지 둘 다 사용해야하는 경우가 있다. 관련된 예로는 시간 계산과 같은 알고리즘 문제를 풀 때가 있을 것이다. 이럴 때 사용하기 좋은 게 python에서 제공해주는 divmod() 함수라고 생각된다. divmod() divmod()를 사용하게되면 몫과 나머지를 동시에 제공해준다. 10을 3으로 나눴을 때, 몫과 나머지.. 2024. 1. 29.