Stay Hungry Stay Foolish

프로그래머스 코딩테스트 50

[Programmers] L1. 카드 뭉치 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡Queue 이용cards1와 cards2를 각각 큐처럼 사용하여, 앞에서부터 단어를 꺼냄goal 배열의 각 단어에 대해해당 단어가 cards1의 맨 앞에 있다면 cards1에서 제거그렇지 않고 cards2의 맨 앞에 있다면 cards2에서 제거두 곳 모두에 없다면 "No"를 반환모든 단어를 성공적으로 처리했다면 "Yes"를 반환Solutionfrom collections import dequedef solution(cards1, cards2, goal): answer = "Yes" cards1 = deque(car..

[Programmers] L1. 추억 점수 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법photo 에서 한 행씩 꺼내고, 해당 행의 열을 하나씩 꺼내서 이름 리스트에 이름이 있는 경우 점수에 누적시킨다.한 행을 다 돌았으면 점수를 결과 리스트에 추가한다. Solutiondef solution(name, yearning, photo): answer = [] for i in photo: score = 0 for j in i: if j in name: # 해당 이름이 있는 경우 score += yearning[name.index(j)] ..

[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] L1. [1차] 비밀지도 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법입력받은 배열을 한 줄씩 순회하며, arr1과 arr2에서 동일한 위치에 있는 숫자 i와 j를 함께 다룬다.i와 j를 각각 n자리 이진수 문자열로 변환한다. 여기서 i를 이진수로 바꾼 후, n자리 형식으로 맞추기 위해 0을 앞에 추가해 준다.변환한 두 이진수 문자열을 한 자리씩 비교같은 위치에 있는 두 비트 값이 둘 중 하나라도 1이면 해당 위치를 #으로, 둘 다 0이면 공백으로 바꾸어 bin_str에 추가bin_str이 완성되면 한 줄의 지도가 생성된 것이므로, 이를 answer에 추가모든 줄에 대해 반복한 후 answer를 ..

[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] L1. 푸드 파이트 대회 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 2로 나누기 주어진 음식의 양을 두 사람에게 나누어 주어야 하므로 2로 나눈다.  2로 나눈 몫만큼 음식을 순서대로 배치하면 된다. 입력 예시[1, 7, 1, 2]0번째 인덱스는 물의 양이고, 물은 항상 1이므로 신경 쓰지 않는다.1번째 인덱스부터 음식의 양이 주어진다.1번째 인덱스를 2로 나눈 몫은 3이다. 이 말은, 7개의 음식을 3개씩 나누어서 두 사람에게 줄 수 있다는 말이다. 따라서 1을 3만큼 저장한다.2번째 인덱스는 2보다 작으므로 두 사람에게 나누어 줄 수 없다. 따라서 무시한다.3번째 인덱스를 2로 나눈 몫은..

[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..