본문 바로가기

프로그래머스6

프로그래머스 level2 _ 구명보트 [Python] 나는 왜 틀렸는가? 내가 처음 작성한 코드는 다음과 같다. def solution(people, limit): print(people) people = sorted(people, reverse = True) answer = 0 save = [] visit = [] for i in range(len(people)): if people[i] not in save: if len(save) == len(people): break rest = limit - people[i] x = [i] y = [people[i]] for j in range(i+1,len(people)): if rest >= people[j] and j not in save: x = [i,j] y = [[people[i],people[j]]] .. 2023. 2. 24.
프로그래머스 level2 _ 짝지어 제거하기 [Python] 나는 왜 틀렸는가? 우선 이런 종류의 문제는 queue, stack을 써서 풀어야한다는 생각을 떠올려야 한다. 나는 기존의 문자열에서 replace함수를 이용해 바꾸는 식으로 풀었는데, 이렇게 풀면 시간도 오래걸리고, 문자열의 인덱스번호도 계속 달라지고 무엇보다 while문의 탈출 조건도 만들기 어렵기 때문에 문제가 복잡해진다. 아래는 내가 처음 시도했던 잘못된 풀이이다. def solution(s): answer = 0 while True: if s == check(s): break s = check(s) if len(s) == 0: answer = 1 return answer def check(s): for i in range(len(s)-1): if s[i] == s[i+1]: s = s.repla.. 2023. 1. 11.
프로그래머스 level2 _ 숫자의 표현 [Python] 1. 완전탐색을 활용한 풀이 완전 탐색을 이용한 문제는 가장 쉽게 떠올릴만한 풀이과정이다. 1부터 n까지의 수를 차례대로 탐색하며, 연속된 합인 1 + 2 + 3 + 4 + 5 = 4 + 5 + 6 = 7 + 8 = 15 임을 찾아내고, 2 + 3 + 4 + 5 + 6 의 경우 2 + 3 + 4 + 5 = 14에서 2 + 3 + 4 + 5 + 6 = 20으로 가기 때문에 해당되지 않음을 알 수 있다. 이를 코드로 나타내면 아래와 같다. def solution(n): answer = 0 for i range(1,n+1): sum = 0 for j in range(i,n+1): sum += j if sum == n: answer += 1 break elif sum > n: break return answer.. 2023. 1. 10.
프로그래머스 level2 _ 올바른 괄호 [Python] 첫번째 풀이는 아래와 같다. def solution(s): q = "" for i in s: q += i if "()" in q: q = q.replace("()","") if q == "": answer = True else: answer = False return answer 문자열에 문자를 하나씩 추가한 다음 ()가 완성될때마다 공백으로 치환하였다. 다만 시간초과가 떠서 통과하지 못하였다. 아마 replace함수를 사용하는 것이 시간초과의 원인인 것 같다. 정답코드는 아래와 같다. def solution(s): answer = True stack = [] for b in s: if b == '(': stack.append(b) elif len(stack) and b == ')': stack.pop(.. 2022. 12. 31.
프로그래머스 level2 _ 최솟값 만들기 [Python] 처음에는 가능한 모든 조합을 다 계산해서 최솟값을 찾으려고 하였다. 그러나 A,B로 부터 [(1,5),(2,6),(3,7)], [(1,6),(2,5),(3,7)], [(1,7),(2,5),(3,6)], ... 의 가능한 조합 전체를 뽑아내는 코드를 구현하지 못했다. 또 구현한다고 하더라도 A,B의 크기가 1,000이하의 자연수 이기 때문에 너무 오래걸릴 것이다. 정답 코드는 아래와 같다. def solution(A,B): answer = 0 A.sort(reverse = True) B.sort() for i in range(len(A)): answer += (A[i]*B[i]) return answer A,B 중 하나는 역순으로, 나머지 하나는 순서대로 정렬한 후 인덱스 순서대로 곱한 후 더하면 그것이 .. 2022. 12. 31.
프로그래머스 level2 _ JadenCase 문자열 만들기 [Python] https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 나의 코드(오답) def solution(s): s = s.lower() lst = map((lambda x : str(x[0].upper()) + str(x[1:])), s.split(" ")) answer = " ".join(lst) return answer 틀린 이유 : 제한 조건을 보면, 공백문자가 연속해서 나올 수 있다고 되어있는데, 해당 경우를 고려하지 못하였다. 즉, "3peopl.. 2022. 12. 30.