BOJ - 프린터 큐 1966
·
코딩테스트
해결방법문제의 핵심은 중요도와 문서의 번호를 매치하는 것이다. 문제에서 문서가 몇 번째로 인쇄되는가를 찾기 위해서는 현재 문서의 중요도가 가장 우선이 되는지를 체크해야 한다.따라서 큐와 우선순위 큐를 만들어서 현재 큐에서 Pop을 했을때의 우선순위가 우선순위 큐의 우선순위보다 낮다면 다시 큐에 집어넣고, 아니라면 우선순위 큐 또한 Pop을 하고 count를 체크하는 방식으로 하면 된다. 정답 코드#include #include using namespace std;int main(){ int testCase, priority = 0, count = 0; cin >> testCase; for (int t = 0; t > N >> M; queue> q; priority_queue pq; for (int ..
BOJ - 반복하지 않는 수 7696
·
코딩테스트
해결방법쉽지 않은 문제였다. 핵심은 같은 수가 자리수를 반복해서 나오지 않는다는 것으로, 1의 자리부터 차례로 자릿수를 올려가면서 경우의 수를 따지는 것 부터 시작이다. 우선 중복 없이 k자리의 수를 센다고 해보자.1자리인 경우 1~9까지 총 9개 이다.2자리인 경우 0~9까지 10개중 1자리와 겹치지 않도록 해야 하므로 9개가 되어 총 9 * 9 = 81개가 된다.3번째 자리부터는 아예 일반화가 가능해져서 코드상에서는 count[i] = count[i-1] * (11-i) 라는 형태가 된다. 그리고 이때의 누적 개수는 sum배열을 통해 구할 수 있다.예를 들어 sum[2]인 경우 1자리와 2자리의 중복없는 수의 총 개수이므로 9 + 81 = 90이 된다. 그 다음은 n번째 수가 몇 번째 수인지를 찾는 ..
BOJ - 청기 백기 15736
·
코딩테스트
해결방법처음에는 벡터를 이용하여 깃발을 실제로 올리고 내리고를 구현하려고 했는데, 문제 조건에 깃발의 개수가 최대 21억개인것을 확인하고 다른 방법을 찾기로 했다.그렇게 찾은 방법이 바로 저 제곱근을 이용하는 것인데, 깃발은 1의 배수부터 차례대로 뒤집히기 때문에, 깃발이 더 뒤집히지 않기 위해서는 약수의 수가 홀수여야 한다.예를 들어 5의 경우 약수가 1, 5이기 때문에 백색 -> 청색이 된다. 하지만 9의 경우 1, 3, 9가 약수이기 때문에 백색 -> 청색 -> 백색이 된다.즉, 제곱근을 씌워서 자연수인 수들이 바로 우리가 찾는 깃발의 수가 되는 것이다. 정답 코드#include #include using namespace std;int main(){ long long N; cin >> ..
BOJ - Potato 28464
·
코딩테스트
해결방법입력을 받으면서 전체 합계를 구해두고, 오름차순 정렬을 한다.감자튀김을 한쪽은 최대한 많이, 한쪽은 최대한 적게 가져가야 하기 때문에, 앞에서 절반을 성우가 가져가고, 나머지 전체 감자튀김에서 성우가 가져간 양을 제외하면 박모씨가 가져간 양이 된다. 정답 코드#include #include #include using namespace std;int main(){ int N, A = 0, B = 0; cin >> N; vector Chips(N); for (int i = 0; i > Chips[i]; A += Chips[i]; } sort(Chips.begin(), Chips.end()); for (int i = 0; i
BOJ - 임시 반장 정하기 1268
·
코딩테스트
해결방법학생들을 1~5학년까지의 반을 이차원 배열 형식으로 입력받는다. 그 다음 모든 학생들을 자기 자신을 제외한 다른 모든 학생들과 1~5학년까지 같은 반이었는지를 체크하여 리더 카운트를 올리면서 임시 반장을 구하면 된다. 정답 코드#include #include using namespace std;int main(){ int std; int max = -1; int leader = 0; cin >> std; vector> classmates(std, vector(5)); vector classmates_count(std, 0); for (int i = 0; i > classmates[i][j]; } } for (int i = 0; i max) { max = classmates_count[i]..
BOJ - 유기농 배추 1012
·
코딩테스트
해결방법크게 배추밭과 배추의 위치를 입력하는 부분과 실제로 배추흰지렁이가 필요한 개수를 구하는 부분으로 나눠서 생각할 수 있다.입력부의 경우 그냥 입력받는 좌표를 이차원 배열로 변환하여 입력받으면 된다. 배추 흰지렁이는 배추가 연결되어 있기만 한다면 전부 커버가 가능하다는 점을 이용해서 문제를 풀 수 있다. 여기서는 큐를 이용하는데, 좌상단에서 우하단으로 훝으면서 배추를 찾는다.배추가 발견되었다면 필요한 배추흰지렁이의 수를 1 늘리고, 이 지점을 방문했다는 표시를 한다.그리고 큐에 현재의 위치를 집어넣는다. 그 다음은 큐가 비어있지 않는 한 계속 반복하는 while문인데, 큐에서 가장 위에 있는 값을 꺼내고, 그 값을 삭제한다.이 값은 배추가 있는 위치좌표인데, 이 위치좌표에서 상하좌우에 배추가 있는지를..