전체 글 138

[프로그래머스] 베스트앨범

1. 문제 이해 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 한다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같다. (1). 속한 노래가 가장 많이 재생된 장르부터 수록 (2). 장르 내에서 많이 재생된 노래부터 수록 (3). 장르 내에서 재생 횟수가 같다면, 고유번호가 낮은 노래를 먼저 수록 문자열 배열 genres와 정수 배열 plays가 주어진다.베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 리턴한다. Ex). genres: ["classic", "pop", "classic", "classic", "pop"], plays: [500, 600, 150, 800, 2500] -> [4, 1, 3, 0] 리턴 2. 풀이 과정이 문..

[프로그래머스] 전화번호 목록

1. 문제 이해문자열 벡터 전화번호부가 주어진다. 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인한다. 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 리턴한다. 2. 풀이 과정모든 전화번호를 해시맵에 저장한다.해시맵을 순회하며 번호를 선택한다.해당 번호를 한 글자씩 늘려가며 장부에 있는지 조회한다. 3. 전체 코드#include #include #include using namespace std;bool solution(vector phone_book) { unordered_map map; for (string num : phone_book){ map[num] = 1; } for (st..

제 36회 ADP 실기 불합격 후기

26.5.2에 치뤄진 ADP 실기 사전점수를 오늘 확인했다.결론적으로 불합격이다. 군대에서 시간을 쪼개서 나름 열심히 준비했는데 아쉬운 결과다.(우리 부대 사지방 컴퓨터는 정말 많은 인내심을 필요로 한다..) 시험 일정에 맞춰 3일간 집중해서 공부하려고 수요일부터 토요일까지 3박 4일 휴가를 썼다.부대에서 강제로 당한(?) 모래주머니 훈련법 덕분인지, 휴가 기간 동안 온전히 내 노트북으로 시험을 준비할 수 있어 행복했다. 시험 전 계획했던 타임 라인(통계 분석: 1시간 -> 기계학습: 각각 1시간 반씩)을 잘 따라 갔으나..1시간 반을 남기고 마지막 문제인 기계학습 2번 문제를 만나게 되고 남은 모든 시간을 쏟았으나 결국 JSON 전처리 를 해결하지 못했다. 전처리 문제를 제대로 풀지 못하면 뒤 문제들을..

자격증/ADP 2026.05.23

[프로그래머스] 가장 큰 수

1. 문제 이해정수형 벡터가 주어진다. 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 리턴한다. Ex). numbers = [6, 10, 2]라면 result는 "6210" 2. 풀이 과정C++ sort 함수의 커스텀을 이용한다.(정렬 기준 제시) 먼저 compare 함수를 구현한다.bool compare(string a, string b) { return a + b > b + a; } 정수형 벡터를 문자열형 벡터로 변환한다.vector str_numbers;for (int num : numbers) { str_numbers.push_back(to_string(num));} compare 함수를 매개변수로 정렬한다.sort(str_numbers.begin(), str_numb..

[프로그래머스] 완주하지 못한 선수

1. 문제 이해 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어진다. 완주하지 못한 선수의 이름을 return 한다. 2. 풀이 과정먼저 participant와 competion을 먼저 오름차순 정렬하고 비교하는 방법이 있다.#include #include #include using namespace std;string solution(vector participant, vector completion) { sort(participant.begin(), participant.end()); sort(completion.begin(), completion...

[C++] 문자열 비교와 아스키코드(ASCII) 활용법

1. 설명C++ 코딩테스트에서 문자열이 숫자로만 이루어져 있는지 검사하는 등의 문제를 풀 때, Python에 익숙해진 나머지 문자를 숫자로 형변환(int(s[i]))하려다 컴파일 에러나 논리 오류를 겪기 쉽다.C++이 문자를 내부적으로 어떻게 다루는지 이해하고, 아스키코드의 연속성을 이용해 숫자를 판별하는 깔끔한 방법을 알아본다. Ex). 아스키코드 범위를 이용한 숫자 판별#include #include using namespace std;bool isNumber(string s) { for (int i = 0; i '9') { return false; } } return true;}int main() { cout 왜 이럴까? 작은따옴표로 감싸..

C++/Basics 2026.05.18

[LeetCode] 188. Best Time to Buy and Sell Stock IV

1. 문제 이해정수 배열 prices와 정수 k가 주어진다.prices[i]는 i번째 날의 주식 가격을 의미한다.최대 k번의 거래로 얻을 수 있는 최대 이익을 리턴한다.(주식을 사기 전에 가지고 있는 주식을 팔아야 한다.) Ex).Input: k = 2, prices = [3,2,6,5,0,3] Output: 7 Explanation: Buy on day 2 (price = 2) and sell on day 3 (price = 6), profit = 6-2 = 4. Then buy on day 5 (price = 0) and sell on day 6 (price = 3), profit = 3-0 = 3. 2. 풀이 과정123. Best Time to Buy and Sell Stock III 문제와 발상..

Algorithms/LeetCode 2026.02.17

[LeetCode] 123. Best Time to Buy and Sell Stock III

1. 문제 이해정수 배열 prices가 주어진다.prices[i]는 i번째 날의 주식 가격을 의미한다.두 번의 주식 거래로 얻을 수 있는 최대 이익을 리턴한다.(주식을 사기 전에 가지고 있는 주식을 팔아야 한다.) Ex).Input: prices = [3,3,5,0,0,3,1,4] Output: 6 Explanation: Buy on day 4 (price = 0) and sell on day 6 (price = 3), profit = 3-0 = 3. Then buy on day 7 (price = 1) and sell on day 8 (price = 4), profit = 4-1 = 3. 2. 풀이 과정우리가 하루에 가질 수 있는 상태는 4가지다.(1). buy1: 첫 번째 주식을 산 상태(2). s..

Algorithms/LeetCode 2026.02.17

[LeetCode] 72. Edit Distance

1. 문제 이해두 문자열 word1, word2가 주어진다.word1을 word2로 convert하는 최소 operations 수를 리턴한다. (허용된 operations)- Insert a character- Delete a character- Replace a character 2. 풀이 과정dp를 활용한다.dp[i][j]를 word1의 앞 i글자를 word2의 앞 j글자로 바꾸는 데 드는 최소 비용으로 정의한다. 3. 전체 코드class Solution: def minDistance(self, word1: str, word2: str) -> int: m, n = len(word1), len(word2) # DP 테이블 초기화 dp = [[..

Algorithms/LeetCode 2026.02.16

[LeetCode] 5. Longest Palindromic Substring

1. 문제 이해문자열 s가 주어진다.문자열 s 안의 가장 긴 palindromic substring을 리턴한다. Ex).Input: s = "babad"Output: "bab"Explanation: "aba" is also a valid answer. 2. 풀이 과정(중심 확장법)문자열의 각 위치를 순회하며 해당 위치를 중심으로 잡는다.중심은 홀수 길이("aba"의 b)일 수도 있고, 짝수 길이("abba"의 bb)일 수도 있다.중심에서 양옆으로 한 칸씩 확장하며 글자가 같을 때까지만 진행한다. (DP)다른 풀이도 존재한다.dp를 활용하여 이전 계산 결과를 재사용하여 팰린드롬임을 확인할 수 있다.dp[i][j]는 s[i]부터 s[j]까지의 문자열이 팰린드롬인가? (True/False)를 의미한다.s[i..

Algorithms/LeetCode 2026.02.16