BOJ - Best Chance 31800
·
코딩테스트
해결방법핵심은 기회비용을 어떻게 구하느냐에 달린 문제이다. 자기 자신을 제외하고 가장 큰 이익에서 자신의 비용을 제외한 것이 기회비용이므로, 먼저 가장 큰 이익 2개를 구해준다면 문제를 푸는 속도가 빨라지게 된다. 정답 코드#include #include #include using namespace std;int main(){ int N, max1 = -1, max2 = -1; cin >> N; vector Profit(N), Price(N), Alt(N), Net(N); for (int i = 0; i > Profit[i]; for (int i = 0; i > Price[i]; for (int i = 0; i max1) { max2 = max1; ..
BOJ - 식당 메뉴 26043
·
코딩테스트
해결방법우선 문제를 앞에서부터 끊어서 살펴보자.만약 1 a b = 학생번호가 a이고 좋아하는 메뉴가 b인 학생이 추가되었다는 의미이고,2 b 의 경우는 메뉴번호가 b인 식사가 준비되었고 맨 앞의 학생이 식사를 받았다는 의미가 된다.즉, N회 반복문 내에서 케이스를 1과 1이 아닌경우(=2)로 나눠서 따로 입력을 처리하면 된다는 이야기이다. 밥을 먹는 순서 자체는 FIFO(First In First Out)구조이기 때문에 큐를 사용하여 학생들의 번호와 학생들의 선호 음식을 묶어서 관리해주면 되는 문제이다. 정답 코드#include #include #include #include using namespace std;void printList(const vector& V){ if (V.empty()) ..
BOJ - 카드셋트 11507
·
코딩테스트
해결방법문자열이 한줄로 들어온다는것을 알 수 있고, 그 문자열은 3자씩 끊어서 파싱해야 한다는 것과 중복을 허용하지 않기 때문에 set을 이용하여 중복체크를 한다는 것을 알 수 있는 문제이다. 정답 코드#include #include #include using namespace std;int main(){ string S; set cards; int p = 0, k = 0, h = 0, t = 0; cin >> S; for (int i = 0; i
BOJ - 종이의 개수 1780
·
코딩테스트
해결방법먼저 이 문제는 단순하게 생각하면 전체 숫자가 동일한지를 판단하고, 동일하다면 그 종이의 종류를 체크하고 출력하고, 동일하지 않다면 종이를 9등분 해서 다시 체크하고...를 반복하는 문제이다. 즉, 이 종이 내에서 모든 칸의 값이 동일한지 체크하는 함수와 동일하지 않을 때 종이를 9등분 하여 다시 재귀를 돌리는 함수로 나눠서 생각해볼 수 있다. 정답 코드#include #include using namespace std;int Minus = 0;int Zero = 0;int Plus = 0;bool isSame(const vector>& paper, int x, int y, int size){ int first = paper[x][y]; for (int i = x; i >& paper, int x..
BOJ - 킹 1063
·
코딩테스트
해결방법굉장히 복잡한 문제이지만, 쪼개서 살펴보면 풀 수 있다.먼저 문제에 대해서 한번 살펴보자.킹과 돌은 체스판 위에 좌표의 형태로 주어지고, 방향 지시와 이동 횟수가 주어진다.만약 킹이 돌이 있는 칸으로 이동한다면 돌도 동일한 방향으로 한 칸 이동하게 된다.어느 한 쪽이 보드를 벗어난다면 그 지시는 무시한다. 이제 함수에 대해서 살펴보자.enum kingmove{ R, L, B, T, RT, LT, RB, LB,};const int dr[] = { 0, 0, -1, 1, 1, 1, -1, -1 };const int dc[] = { 1, -1, 0, 0, 1, -1, 1, -1 };이 부분이 기물을 움직이는데 필요한 핵심 파츠이다. 열거형으로 정의해놓은 값들을 전역 배열의 인덱스로 사용해서 메인함수에서..
BOJ - 장난감 경주 19592
·
코딩테스트
해결방법문제가 길어서 복잡해 보이지만 간?단하게 풀 수 있는 문제이다. for (int i = 0; i 이 부분을 자세히 보자. 자기 자신을 제외한 나머지 참가자들의 속도를 가지고 최소 도달 시간을 구하는 부분이다.MinTime은 최대값으로 입력되어 있었으니 모든 참가자를 전부 돌리면 우승을 하려면 얼마나 빨리 가야 하는지를 알 수 있게 된다. 그다음 파트는 내가 부스터를 써야 하는지, 써도 이길 수 없는지를 판단하는 부분이니 생략하고, 남는건 최소 부스터 양을 계산하는 부분이다.for (int z = 1; z 정답 코드#include #include #include using namespace std;int main(){ int T, N, X, Y, speed, answer; doubl..