본문 바로가기

Coding22

프로그래머스 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.
[Git / Github] Username for 'https://github.com' 계속 나옴 Github에 있는 repository를 clone해서 쓰다보면, 아래와 같이 Username과 Password를 물어보는 경우가 있다. 이때, Password로는 token을 입력하면 되는데, token을 찾는 방식은 우선 다음과 같다. 1. Github 우측 상단 프로필을 클릭한 후 Settings 클릭 2. 왼쪽 배너 제일 하단에 Developer settings 클릭 3. Personal access tokens - Tokens (classic) 클릭 4. Generate new token - Generate new token (classic) 클릭 5. 정보를 입력하고 제일 아래 Generate token을 클릭한다. (Select scopes는 대충 선택하고 Generate token을 클릭하.. 2023. 1. 2.
프로그래머스 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.