본문 바로가기

알고리즘37

백준 1036 36진수 C++ 간단한 해설36진법의 수 N개가 주어진다. 36진법 숫자(0-9, A-Z) 중에서 K개의 숫자를 고른다. 그러고 나서 N개의 수 모두에서 나타난 그 숫자를 Z로 바꾼다. 여기서 Z로 바꾸는 기준이 (Z - 기존수)의 값이 가장 큰 value를 고르면 된다. 만약 예제가 이렇게 있다고 생각해보자2A0B01 A를 Z로 변환하면 Z0+B0=1A0이 된다.B를 Z로 변환하면 A0+Z0=190이 된다. 그래서 우선순위 큐를 활용하던가, 정렬을 이용해서 (Z-기존수)의 합들의 값이 가장 큰 진수를 고르면 된다. 테이블을 만들어서 해당되는 자리수와 그에 맞는 진수, 이 둘에 대한 개수를 넣으면 좀 더 편하게 생각할 수 있다.  그런데, Z랑 0일 때, 특이 케이스를 배제하지 않으면 5%틀이 계속 나오게 된다... 나.. 2024. 9. 24.
백준 2806 DNA 발견 C++ 설명앞에서부터 전부 A로 만들던가 아니면 전부 B로 만드는 것의 연장선  앞에서부터 전부 A로 만드는것의 최솟값=> 뒷 전부 A or 전부 B에서 선택앞에서 전부 B로 만드는것의 최솟값 => 뒷 전부 A or B에서 선택 답 #include #include #include using namespace std;int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n; cin>>n; string a; cin>>a; vector> dp(2,vector(1000001)); for(int i=0;i 2024. 9. 23.
백준 1939 중량제한 C++ 간단한 해설시작점부터 도착점까지 최대 중량 제한을 bfs로 찾으면 된다.같은 지점을 여러 번 방문할 수 있어서 int인 방문 배열로 체크하는게 포인트간단한 반례6 121 2 71 3 81 4 71 6 92 3 73 4 73 5 74 5 74 6 73 6 71 3 115 6 126 3ans: 9 답 #include #include #include #include using namespace std;int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n,m; cin>>n>>m; vector>> v(n+1,vector>()); // weight, idx for(int i=0;i>a>>b>>c; v[a].pus.. 2024. 8. 19.
백준 20055 컨베이어 벨트 위의 로봇 C++ 간단한 해설지문이 거지같아서 문제가 어렵다고 느낀 문제 1번 위치에서 로봇을 올리고, N번 위치에 로봇이 도착하면 로봇을 무조건 내린다.(내릴 때, 내구도는 소모하지 않음)  이하의 스크린샷에 담긴 모든 과정의 사이클이 돌아야 한 단계이다.(서식오류로 12134로 된 듯하다.)  다음의 링크를 통해 개선된 지문을 확인할 수 있다. problem-solve-hub/백준/Gold/20055. 컨베이어 벨트 위의 로봇/이해를 위한 문제 수정본.md at main · cThis is a auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - codesv.. 2024. 8. 18.
백준 14222 배열과 연산 C++ 해설1부터 n까지 빈자리 모두 채워넣기 1부터 빈자리 찾아넣는다고 해서 그리디라고는 한다는거같은데 그리디의 개념은 조금 약한거 같다.간단하게 풀기 가능답#include #include #include using namespace std;int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n,k; cin>>n>>k; vector v(n); for(int i=0;i>v[i]; } sort(v.begin(),v.end()); vector visited(n,false); for(int i=0;i 2024. 8. 7.
백준 1781 컵라면 C++ 해설문제를 처음 보자마자 그리디 알고리즘인 것을 깨닫고 우선순위 큐를 사용하였다. n과 데드라인이 20만까지 나올 수 있으므로, n이 20만이고, 모든 숙제의 데드라인이 20만인 경우의 수를 생각해봐야 한다. 데드라인에 맞춰 가장 큰 컵라면의 수를 뽑을려 하면 시간초과에 걸린다. 그렇기에 반대로 생각해서 날짜를 정한다.제일 처음 날짜부터 차례대로 정해두고 가장 큰 컵라면의 수를 꺼내면 문제를 풀 수 있다. 이때, 데드라인때문에 삭제될 수 있는 값들은 우선순위 큐를 하나 더 이용해서 지우는 것이 포인트이다. 답 #include #include #include #include #define ll long longusing namespace std;int main(){ cin.tie(0); ios_.. 2024. 8. 3.