본문 바로가기

전체 글

(47)
BOJ 1700 멀티탭 스케줄링 BOJ 백준 1700 C++ 멀티탭 스케줄링 https://www.acmicpc.net/problem/1700 1) 처음에는 N개를 채울 때까지 order[]를 차례대로 진행한다 2) N개를 모두 꽂으면, 꽂혀 있는 것 중 제거할 것을 선택해야 한다. case 0. 꽂혀 있는 것을 확인하여, 앞으로 사용 안 하는 것 있으면 제거 case 1. 꽂혀 있는 것들을 확인했는데, 모두 사용될 예정이면 (case0에서 조건 걸리지 않으면), 가장 나중에 사용될 것을 제거 [현재 order의 다음 순서(i+1) ~ 순서의 끝(K)]을 for 돌면서 아래 조건을 확인한다. if(res[order[j]][0]>0 && res[order[j]][1]==1 && !check[order[j]]) -> (앞으로 사용될 것 &..
BOJ 2824 최대공약수 BOJ 백준 2824 C++ 최대공약수 https://www.acmicpc.net/problem/2824 아. 엄청 고생했던 문제.. 잊을 수 없다. 1) 약수 구하기의 응용문제, 주어지는 수가 매우 커서 오버플로우에 주의해야 한다. 2) 처음에는 배열 인덱스를 이용해서 약수의 개수를 카운트하려고 했는데, 약수 input의 값이 최대 999,999,999이기 때문에 배열 메모리 초과를 예상하고, map 자료구조를 이용해서 -> 를 만들었다. 3) 약수를 구할 때, 두 가지 방법을 이용했다 3-1) 약수의 특성을 이용해서 j*j까지 확인하기 (j*j> N; for(int i=0; i> x; for(int j=2; j*j> M; for(int i=0; i> x; for(int j=2; j*jfirst; if..
BOJ 1655 가운데를 말해요 BOJ 백준 1655 C++ 가운데를 말해요 https://www.acmicpc.net/problem/1655 0) 처음에는 이중 for문 이용해서 N^2시간에 구하려고 했는데 직관적으로 시간초과가 예상되었다(N이 최대 10만) 1) priority queue를 이용한 두개의 heap을 통해 중간값을 구할 수 있다. 2) [조건 1] pqLeft의 크기는 pqRight와 같거나, 1 크다 [조건 2] pqLeft.top() 의 값은 -pqRight.top() 보다 항상 작다. -> 크기가 같을 때, left에 push하므로 push 후 top을 확인하여, 재정렬 필요 ***** 문제에 주어진 실행 시 pqLeft, pqRight에 실제 들어있는 값 pqLeft : 기본 우선순위 큐 사용, 내림차순 정렬 ..
BOJ 2151 거울 설치 백준 BOJ 2151 C++ 거울 설치 https://www.acmicpc.net/problem/2151 1) BFS 문제 -- BFS는 이제 빠른 시간 내에 풀 줄 안다고 생각했는데 .. 오래 걸렸다! 더 열심히! 2) 코드를 깔끔하게 짠다고(중복 줄이기, 불필요한 연산 줄이기) 생각을 오래 했는데.. 부족한 것 같다. 3) 거울이 없을 때는 공통 부분이므로 따로 조건문 안에 넣지 않았고, 다음 칸이 '!'일 때 방향 전환해서 큐에 넣었다. /** * 200610 * 2151 거울 설치 * BFS * */ #include #include #define INF 987654321 using namespace std; int N; char map[52][52]; int check[52][52][4]; int..
BOJ 1600 말이 되고픈 원숭이 백준 BOJ 1600 C++ 말이 되고픈 원숭이 https://www.acmicpc.net/problem/1600 1) BFS 문제 2) #14442 벽 부수고 이동하기2 (https://www.acmicpc.net/problem/14442) 와 비슷한 문제라고 생각했다. #14442와 마찬가지로 주어진 K만큼 특별한 이동(말의 이동처럼)을 할 수 있다.(hx, hy) cnt가 K보다 작을 때는 hx, hy를 이용하여 이동하는 경우를 큐에 push, 그리고 K와 관계없이 dx,dy를 이용하여 인접한 이동에 대해 큐에 push했다. 3) 원숭이의 도착 지점이 (H,W)이므로, 도착 지점 도달 시 가능한 ans의 최솟값을 비교하여 update한다. 4) 내가 실수했던 지점은, 47line에서 check[nx..
BOJ 1986 체스 백준 BOJ 체스 C++ https://www.acmicpc.net/problem/1986 1) 풀면서 정.말.로 다 해보는 거 맞아? 하는 의문이 정말 많이 들었는데 정말 '브루트 포스'가 맞았다.. 2) 시키는 대로 조건 설정 해주면 된다. 나는 Queen, Knight의 좌표를 벡터에 넣어서 차례대로 말을 움직였다. 3) [Queen:1 / Knight:2 / Pawn:3 / Queen 이동 가능:4 / Knight 이동 가능:5] 설정하여 마지막에 map의 값이 0인 것만 카운트해서 출력한다. #include #include using namespace std; int N, M; int map[1005][1005]; struct info{ int x, y; }; vector q; vector k;..
2018 KAKAO BLIND [1차] 다트 게임 2018 KAKAO BLIND RECRUITMENT C++ 작성 [1차] 다트 게임 https://programmers.co.kr/learn/courses/30/lessons/17682 1) 조건에 따라 코드를 작성하는 시뮬레이션 문제이다. 2) 점수가 0~10 사이로 주어진다고 했으므로 10점일 경우의 처리는, 숫자 입력 후 다음 문자가 '0'이면 score를 10으로 만들었다. 3) 이 문제의 포인트는 '*' 조건에서 이전 점수까지 고려해서 계산하는 것. 한 세트를 계산했을 때 -> 이전 점수(완전히 점수가 확정됨)를 answer에 더해 준다. 그리고 반복문을 빠져나와 answer를 return하기 전에 가장 마지막 점수를 더해 준다. -> 이전 점수만 answer에 더했기 때문에 마지막 점수가 더해..
BOJ 2565 전깃줄 백준 BOJ 전깃줄 C++ https://www.acmicpc.net/problem/2565 1) DP를 이용한 LIS (최장 증가 부분 수열, Longest increasing subsequence) 2) LIS를 복습 할 수 있었던 문제. 최근까지 헷갈렸는데 이번에 확실히 정리! 3) 이 문제의 output은 LIS에 포함되지 않는 것을 출력해야 함. /** * 200522 * BOJ 2565 전깃줄 * LIS 최장 증가 부분 수열 * */ #include #include using namespace std; int N; pair arr[105]; int mxLen[105]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin ..