전체 글 111

[프로그래머스] - k번째 수(정렬) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 굳이 lamda를 한 번 써봤다. 코드 #include #include #include using namespace std; vector solution(vector array, vector commands) { vector answer; int n = commands.size(); for (int tc=0;tc

[프로그래머스] - 베스트앨범(해시) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 고민을 많이 했다. level 3인 만큼 생각할 게 많았다. 1. 장르별로 plays수를 저장해야하고, 그것을 정렬할 수 있어야했다. Map에 우선 저장해놓고, vector로 받아와 comparator1를 이용해 정렬했다. map에 우선 저장을 해놓은 이유는 plays수를 합산하기 편해서이다. 2. plays수가 가장 많은 장르를 불러왔을 때, 그 장르에 속한 노래들의 고유번호를 알..

[프로그래머스] - 의상(해시) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 옷의 종류별로 map에 넣고 하나씩 들어올 때마다 +1씩 해줬다. 코드 #include #include #include using namespace std; int solution(vector clothes) { int answer = 0; map check_clothes; for (auto& c : clothes) { check_clothes[c[1]]++; } if (check_..

[프로그래머스] - 전화번호 목록(해시) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 map을 이용해 쉽게 풀 수 있었다. map에 저장할 때, 전화번호마다 접두사를 모두 저장했다. phone_book에서 불러운 전화번호가 map에 2개 이상 있다면, 그 전화번호는 다른 번호의 접두사인 것이다. 코드 #include #include #include using namespace std; bool solution(vector phone_book) { bool answer..

[프로그래머스] - 포켓몬(해시) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 처음 보고 level1인데 왤케 어렵나 했다. 쉽겠거니 하고, 다시 문제를 봤다. 쉬운 문제가 맞았다. 코드 #include #include using namespace std; int solution(vector nums) { int answer = 0; int n = nums.size(); int k = n / 2; //k는 가져갈 수 있는 포켓몬 수 map species; for..

[프로그래머스] - 완주하지 못한 선수(해시) c++

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근방법 map에다가 participant를 넣고, completion을 다시 뺐다. 코드 #include #include #include using namespace std; string solution(vector participant, vector completion) { string answer = ""; map hash; for (auto& p : participant) { hash..

[백준 14719] - 빗물 c++

문제 https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 접근방법 막대기 사이 빗물을 채우기 위해서 배열을 2개 만들었다. 최고점을 저장하는 배열 arr와 블록이 쌓인 모양 그대로 2차원배열 block이다. 최소 w>2 이상일 때 빗물이 채워질 수 있다. 따라서 i = 2 부터 시작해서 block을 횡으로 탐색할건데, 이때 block의 높이인 arr[i]를 받아와서 heigth로 저장한다. height는 세로위치, j는 가로 위치..

[백준 2531] - 회전 초밥 c++

문제 https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 접근방법 앞서 사용했던 투 포인터를 사용했다. 투 포인터가 은근히 많이 쓰이나보다. 회전 초밥이기 때문에, dishes배열을 2개 이어 붙였다. 배열 이어 붙이는 것이 아주 유용하게 쓰인다. start와 end 포인터를 두고 그 사이에 있는 숫자들의 개수를 셌다. 그리고 while문이 돌 때마다 배열을 초기화했다. flag는 범위 안에 쿠폰 번호가 있는..

[백준 17615] - 볼 모으기 c++

문제 https://www.acmicpc.net/problem/17615 17615번: 볼 모으기 첫 번째 줄에는 볼의 총 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 다음 줄에는 볼의 색깔을 나타내는 문자 R(빨간색 볼) 또는 B(파란색 볼)가 공백 없이 주어진다. 문자열에는 R 또는 B 중 한 종류만 주 www.acmicpc.net 접근방법 단순 계산으로 접근했다. 파랑색, 빨강색 볼 개수를 각각 세고 가장자리에 있는 파랑색, 빨강색 볼 개수를 빼줬다. 가장자리에 있는 볼들은 움직이지 않아도 되는 볼들이다. 움직여야 할 볼이 적은 색을 선택해 그 숫자를 세면 된다. 코드 #include #include using namespace std; int main() { int n; cin >> n;..

[백준 20922] - 곂치는 건 싫어 c++

문제 https://www.acmicpc.net/problem/20922 20922번: 겹치는 건 싫어 홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열 www.acmicpc.net 접근 방법 dp문제인 줄 알았다. 근데 투 포인터 문제라고 하길래 투 포인터가 뭔지 검색해봤다. 투 포인터를 알고 나서 다시 봤는데도 구현방법이 떠오르지 않아서, 다른 사람이 푼 걸 봤다. 그냥 끝까지 구현 해볼 걸 그랬다. 할 수 있었을 거 같은데, 아쉽다. 코드 #include #include using namespace std; int main() { int n, k; cin >>..