알고리즘/C++ 풀이 기록 11

백준 - 12833 XORXORXOR

링크 : https://www.acmicpc.net/problem/12833 12833번: XORXORXOR 세 수 A, B, C를 입력 받은 다음, ( ( ( ( A XOR B ) XOR B ) XOR B ) … ) XOR B 형태로 연산을 C회 했을 때의 결과값을 출력하는 프로그램을 작성하시오. www.acmicpc.net 1. 문제 풀이 아이디어 xor의 특성을 고려하면 된다. a와 b를 홀수번 계산하면 xor의 결과가 출력된다. a와 b를 짝수번 계산하면 a가 출력된다. 2. 풀이 코드(C++) #include using namespace std; int main(void){ int a, b, c; cin >> a >> b >> c; if(c % 2 == 0){ cout

백준 - 1260 DFS와 BFS

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 1. 문제 풀이 아이디어 문제 이름 그대로 DFS와 BFS를 이용해서 풀면 된다. 그런데 기본적인 DFS, BFS 구현법 그대로 이용하면 틀렸다고 뜨게 된다. 추가적인 구현이 필요하다. 2. 풀이 코드(C++) #include #include #include #include #include #include #define max 1001 using namespa..

백준 - 2606 바이러스

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 1. 문제 풀이 아이디어 bfs를 이용해 풀었다. 2. 풀이 코드(C++) #include #include #include #include #define max 101 using namespace std; bool visited[max]; vector graph[max]; void bfs(int started) { int cnt = 0;//웜 바이러스에 걸린 컴퓨터의 수 저장 queue q; q.pus..

백준 - 1755 숫자놀이

https://www.acmicpc.net/problem/1755 1755번: 숫자놀이 79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 www.acmicpc.net 1. 문제 풀이 아이디어 정렬을 이용하긴 하지만 정렬을 거들뿐. 1. vector를 pair로 이용할 수 있는가 2. 나누기와 나머지 연산을 적절하게 이용할 수 있는가 이 두 개가 주요한 문제 풀이 아이디어이다. 2. 풀이 코드(C++) #include #include #include #include using namespace std; vec..

백준 - 1302 베스트셀러

https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 1. 풀이 코드(C++) #include #include #include using namespace std; map m1; int main(void) { int n; int result = 0; cin >> n; for (int i = 0; i > title; m1[title]++; } for (auto i = m1.begin(); ..

백준 - 1181 단어 정렬

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 1. 풀이 코드 (C++) #include #include #include using namespace std; vector v1; bool compare(string a, string b) { if (a.size() == b.size()) { return a < b; //오름차순 정렬 } else { return a.size() < b.size(); } } int main(void) ..

백준 - 1026 보물

https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 1. 문제 풀이 아이디어 문제의 예제 입력을 통해서 상세히 알아보자. 5 1 1 1 6 0 2 7 8 3 1 이것이 입력이다. 합의 최솟값을 출력하려면 각각 a,b의 곱이 최소여야 한다. 최소를 만드려면 어떻게 하면 될까? 주어진 예제를 가지고 설명해보면, a - 0 1 1 1 6 (오름차순) b - 8 7 3 2 1 (내림차순) 순으로 정렬하면 된다. 2. 풀이 코드(C++) #inclu..

백준 - 1316 그룹 단어 체커

https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 1. 풀이 코드(C++) #include using namespace std; int main(void) { int n,cnt = 0; string word; bool flag; cin >> n; for (int i = 0; i > word; flag = true; for (int j = 0; j < word.len..

백준 - 22993 서든어택 3

https://www.acmicpc.net/problem/22993 22993번: 서든어택 3 좋은 전투 순서가 존재해서 준원이만 생존하고 나머지 플레이어가 모두 죽게 만들 수 있다면 Yes를, 반대로 전투가 어떤 순서로 이루어져도 준원이가 절대 최후의 생존자가 될 수 없다면 No를 www.acmicpc.net 1. 문제 풀이 아이디어 정렬을 이용해서 푸는 것을 핵심으로 하였다. 정렬을 이용하지 않고 푼다고 가정해보자. 준원이의 최초 공격력보다 높은 공격력을 가진 플레이어가 첫 번째 전투 상대라면 준원이가 진다. 준원이가 이길 수 있는 경우의 수를 다 적용하지 않고서 말이다. 그러므로 준원이가 이길 가능성이 높은 상대부터 전투를 하도록 정렬을 이용하였다. 2. 풀이 코드(C++) #include #inc..

백준 - 1158 요세푸스 문제

https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 1. 문제 풀이 아이디어 : 큐를 이용해서 풀면 된다. 특정 숫자(K번째)가 나와야하니까 push로 qu.front()의 값을 저장하고, pop으로 삭제한다. 2. 풀이 코드(C++) #include #include #include using namespace std; void josephus(int a, int b) { queuequ; queueprint_sum; for (int i = 1; i 0) { for (int i = 1; i < b; i++) { qu.push(qu.front..