Stay Hungry Stay Foolish

프로그래머스 코딩테스트/Level 2 16

[Programmers] L1. 명예의 전당 (최소 힙/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 명예의 전당 유지명예의 전당은 k 개의 점수를 유지하며, kkk개를 초과하면 가장 낮은 점수를 제거우선순위 큐(최소 힙)를 활용하면 효율적으로 관리 가능2️⃣ 최하위 점수 추출매번 명예의 전당에서 최하위 점수를 확인하여 기록3️⃣ 점수 처리점수를 하나씩 추가하며 명예의 전당을 업데이트명예의 전당이 가득 차면 최저 점수와 비교 후 대체Solution최소 힙 구현import heapqdef solution(k, score): hall_of_fame = [] # 명예의 전당 (최소 힙) result = [] f..

[Programmers] L2. 귤 고르기 (Greedy/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 귤의 종류별 개수 파악귤의 크기별로 몇 개씩 있는 개수를 센다. (Counter() 함수 이용)from collections import Countertangerine = [1, 3, 2, 3, 2, 4, 4, 4, 4]print(Counter(tangerine))출력 결과 : Counter({4: 4, 3: 2, 2: 2, 1: 1})2️⃣ 개수를 기준으로 정렬귤의 개수를 내림차순으로 정렬한다. 이는 개수가 많은 종류부터 선택하도록 하기 위함이다.위 예시에서 내림차순으로 정렬하면 [(4, 4), (3, 2), (2, 2)..

[Programmers] L2. 구명보트 (Python/투 포인터)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 정렬  (O(nlog⁡n)시간) 사람들의 몸무게 리스트를 오름차순으로 정렬한다.이렇게 하면 가장 가벼운 사람과 가장 무거운 사람을 효율적으로 짝지을 수 있다.2️⃣ 투 포인터 사용 (O(n) 시간) 리스트의 가장 가벼운 사람(왼쪽 포인터)과 가장 무거운 사람(오른쪽 포인터)을 확인한다.두 사람의 몸무게 합이 보트의 무게 제한을 초과하지 않으면, 두 사람을 한 보트에 태운다(양쪽 포인터를 이동).3️⃣ 혼자 태우기두 사람의 몸무게 합이 무게 제한을 초과하면, 가장 무거운 사람만 보트에 태우고 오른쪽 포인터를 이동한다.4️⃣ ..

[Programmers] L2. 영어 끝말잇기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 탈락 조건 : 같은 단어인 경우, 끝말잇기가 성립이 안 되는 경우 게임 진행 정보 초기화몇 번째 게임(라운드)인지 저장할 변수와, 현재 차례를 저장할 변수를 생성한다.두 번째 단어부터 순회하므로 모두 1로 설정한다.현재 단어의 첫 글자와 비교하기 위해, 직전 단어의 마지막 글자를 저장하기 위한 변수를 생성한다.첫 번째 단어의 마지막 단어를 저장한다.중복 여부를 확인하기 위해 사용된 단어를 저장할 리스트를 생성한다. (set 를 사용하는 것이 효율적이다.) 맨 처음 인덱스에 첫 번째 단어를 저장한다.단어 리스트 순회차례가 사람..

[Programmers] L2. 점프와 순간 이동 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 짝수와 홀수를 구분하고, 순간이동은 2배만큼 하므로 2로 나누기 N이 6이라고 할 때, 다음 그림과 같다. 파란색 숫자는 순간이동을 한 위치이다.순간이동을 할 때 2의 배수만큼 움직이므로 2로 나누는데, 이때 홀수와 짝수를 구분한다.홀수이면 -1 을 한 후에 2로 나눠야 하는데, 이 과정이 jump를 한 것과 같다.따라서 홀수일 때만 -1 을 해주고 jump 횟수를 카운트 해준다.Solutiondef solution(n): ans = 0 while n > 0: if n % 2 != 0: ..

[Programmers] L2. 카펫 (완전탐색/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 약수 쌍으로 너비와 높이 찾기 1️⃣ 전체 격자 수 계산total = brown + yellow2️⃣ 약수 쌍 찾기total의 약수를 순회하면서 (width, height) 쌍을 구한다.3️⃣ 노란색 격자 조건 확인노란색 격자는 갈색 테두리 안에 있어 (width - 2) * (height - 2) == yellow를 만족해야 한다.4️⃣ 정답 반환조건을 만족하는 (width, height) 쌍을 [width, height] 형태로 반환한다.Solutiondef solution(brown, yellow): square ..

[Programmers] L2. 짝지어 제거하기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 스택 이용 스택이 비어있으면 스택에 값을 넣는다.스택의 맨 마지막 요소가 현재 문자와 같으면 꺼낸다.위 조건이 다 맞지 않으면 스택에 현재 문자를 넣는다.  Solutiondef solution(s): stack = [] for i in s: if not stack: # 스택이 비어있으면 stack.append(i) continue if stack[-1] == i: # 스택 맨 뒤 요소와 같으면 stack.pop() ..

[Programmers] L2. 피보나치 수 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 fibo[0] = 0, fibo[1] = 1 미리 정의 피보나치 수열에서 첫 두 항, 즉 fibo[0] = 0과 fibo[1] = 1은 시작값이자 수열의 정의에 해당하기 때문에 따로 저장한다. 이들은 피보나치 수열을 계산하는 기초가 된다. 이유는 다음과 같다.재귀적 정의 : 피보나치 수열은 F(n) = F(n − 1) + F(n − 2) 로 정의되며, F(0) = 0과 F(1) = 1 이 없으면 이후의 모든 피보나치 수를 계산할 수 없다. fibo[0]과 fibo[1]이 초기화되지 않으면, 재귀적 연산을 시작할 수 없게 된다..

[Programmers] L2. 이진 변환 반복하기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법2진법 변환 방법 1️⃣ format 함수 이용n = 5binary_str = format(n, 'b') # 결과: '101' 2️⃣ bin() 함수 사용 n = 5binary_str = bin(n) # 결과: '0b101'  3️⃣ f-string을 사용한 포맷팅 n = 5binary_str = f"{n:b}" # 결과: '101' Solutiondef solution(s): zero, num, cnt = 0, 0, 0 # 0의 개수, 2진법 길이, 변환 횟수 while True: cnt += 1 ..

[Programmers] L2. JadenCase 문자열 만들기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법📌주의할 점 : 공백이 여러개 일 때 1️⃣ 주어진 문자열을 split(' ')로 나누어 각 단어와 공백을 유지한 채 리스트에 담는다. 2️⃣ 리스트의 각 단어를 확인하면서,단어가 비어 있지 않다면 첫 문자를 대문자로 변환하고, 나머지 문자는 소문자로 변환한다.첫 문자가 알파벳이 아닌 경우는 그대로 둔다.3️⃣ 변환된 단어 리스트를 다시 공백을 기준으로 문자열로 합쳐 반환한다. 대문자로 변환하는 방법s.upper() 소문자로 변환하는 방법s.lower() Solutiondef solution(s): words = s.spl..

[Programmers] L2. 최솟값 만들기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 A 리스트의 최소와 B 리스트의 최대의 곱, sort() 사용 A 리스트는 오름차순 정렬, B 리스트는 내림차순 정렬한다. 오름차순 정렬A.sort() 내림차순 정렬B.sort(reverse=True) 리스트의 길이만큼 반복문을 돌려 연산을 한다. Solutiondef solution(A, B): answer = 0 A.sort(), B.sort(reverse=True) # 정렬 for i in range(len(A)): answer += A[i] * B[i] return answer  ?..

[Programmers] L2. 올바른 괄호 (스택/큐/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ ")" 를 만날 때 까지 "(" 를 큐에 넣는다.queue.append(n) 2️⃣ ")" 를 만나면 큐의 맨 뒤에서부터 "(" 를 꺼낸다.단, "(" 를 꺼내기 전에 큐가 비어있지 않은지 확인한다. 큐가 비어있으면 꺼내려고 할 때 에러가 난다.큐가 비어있지 않으면 꺼내고 비어있으면 반복문을 중단시킨다.처음부터 ")" 를 만나면 문자열을 끝까지 확인해도 올바르게 짝지어지지 않기 때문이다. queue.pop() 3️⃣ 큐가 비어있지 않으면 False를 반환하고, 비어있으면 True를 반환한다.  ★ True 예시큐가 비어있으..

Programmers 다음 큰 숫자 (Python/Level 2)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한사항 n..

Programmers 최댓값과 최솟값 (Python/Level 2)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다. 제한사항 s에는 둘 이상의 정수가 공백으로 구분되어 있습니다. 입출력 예 s return "1 2 3 4" "1 4" "-1 -2 -3 -4" "-4 -1" "-1 -1" "-1 -1" ..