/images/logo.png

[백준]1049 기타줄

https://www.acmicpc.net/problem/1049 풀이: 여러 브랜드 중 6줄 패키지 가격의 최솟값과 낱개 가격의 최솟값을 저장해 놓는다. 낱개 * 6 보다 패키지 가격이 더 높다면, 패키지로 살 이유가 없으므로 낱개 가격을 출력한다. 필요한 줄의 갯수가 6개 이하라면, 낱개 가격과 패키지 가격 중 낮은 가격을 출력한다. 둘 다 아니라면, (전체를 패키지로 사는 것) 과 (6개로 나눠지는 만큼 패키지로 사고 나머지는 낱개로 사는 것) 둘 중 낮은 가격을 출력한다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <iostream>#include <algorithm>using namespace std; int N, M, q, w, a = 1001, b = 1001, dp[102] = { 0 }; int main(void) { cin >> N >> M; for (int i = 0; i < M; i++) { cin >> q >> w; a = min(a, q); b = min(b, w); } for (int i = 1; i <= N; i++) { dp[i] = (((i - 1) / 6) + 1) * a; dp[i] = min(dp[i], dp[i - 1] + b); } cout << dp[N] << endl; } 코드: 사용언어 : c++

[백준]1068 트리

https://www.acmicpc.net/problem/1068 풀이: v[i] : i의 자식 노드들이 들어있다. 삭제 해야하는 노드가 w 라면, w를 큐에 푸쉬한다. w의 자식노드를 큐에 푸쉬한 후 w를 삭제한다. 자식노드가 없어질 때까지 반복한다. v[ 0 ~ N - 1 ] 까지 모두 순환한다. 노드가 현제 존재하며, 자식노드가 없다면, 리프 노드이므로 +1 해준다. 코드: 사용언어 : c++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include <iostream>#include <queue>#include <vector>using namespace std; int N, a; bool b[52], c; int main(void) { cin >> N; vector<vector<int>> v(N); queue<int> q; for (int i = 0; i < N; i++) { cin >> a; if(a !

[백준]1057 토너먼트

https://www.acmicpc.net/problem/1057 풀이: ​ 1 2 ​ 1 2 3 4 1 2 3 4 5 6 7 8 현재 번호가 i 라고 할 때, 위로 갈 수록 배정받는 번호는 (i + 1) / 2 가 된다. 즉, 김지민과 임한수의 번호가 x, y 라고 할 때, ( x + 1 ) / 2 == ( y + 1 ) / 2 가 되는 순간이 둘이 대결하는 순간이다. 토너먼트가 끝날 때까지 둘이 대결하지 않는 경우는 없으므로 -1 출력은 하지않는다.

[백준]1074 집합

https://www.acmicpc.net/problem/1074 풀이: 배열의 크기를 점차 줄여가면서, 위에 방문할 수 있는 배열의 크기를 계산하여, 더해가면서 구한다. ex) 3 7 7 8 * 8 배열에서 왼쪽위, 오른쪽 위, 왼쪽 아래 4 * 4 배열은 필요없으니까 48 만큼 뺀 후, 오른쪽 아래 배열로만 4 * 4 배열로 줄여서 다시 만든다. 그렇다면, ( 7, 7 ) 은 ( 3, 3 )이 되어야 하므로 (7 % 4, 7 % 4) 가 된다. 배열의 크기가 0이 될때까지 반복한다.

[백준]11723 집합

https://www.acmicpc.net/problem/11723 풀이: [C++]비트연산자 참고 add : or 연산을 통해 값을 추가한다. remove : 값이 있는지 확인 후 있다면, xor 연산으로 삭제한다. check : 값이 있는지 and 연산으로 확인 후 있다면 1, 없다면 0을 출력한다. toggle : 값이 있다면 삭제하고, 없다면 추가한다. all : 비트값을 (2^20) - 1 로 바꿔주어, 1 ~ 20 까지 채워놓는다. empty : 비트값을 0으로 바꿔주어, 공집합으로 만들어놓는다. 시간제한이있으므로 비트마스크를 통해 연산하도록한다. cin, cout 을 사용할 경우 시간초과가 나므로 주의하자.

[프로그래머스]예상 대진표

https://programmers.co.kr 문제: △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, … , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다.