- 알고리즘문제풀이 [백준] 10816번: 숫자 카드 2 문제https://www.acmicpc.net/problem/10816 풀이처음에는 그냥 multiset으로 count해서 풀었다. 시간초과가 났다.입력, 출력하는데서 시간초과가 났나,,,하고 다시 조금 고치고 냈지만 맞을리가 없었다.질문검색을 폭풍 서치한 결과unordered_map을 사용해야한다는 힌트를 얻었다. key에 카드를 저장하고 value에 개수를 저장했다.unordered_map은 key를 정렬하지 않고 저장하는 map으로서map에서 탐색하면 O(logN)이 걸리는 반면unordered_map에서 탐색하면 O(1)이 걸린다. 코드https://github.com/ziwonii24/Algorithm/blob/master/Baekjoon/10816.cpp 결과
- 알고리즘문제풀이 [백준] 17406번: 배열 돌리기 4 문제 https://www.acmicpc.net/problem/17406 풀이 이 문제를 풀어나간 순서를 간단히 말하자면 다음과 같다. 1. 연산 순서 정하기 2. 회전 연산하기 3. 배열값 구하기 1. 연산 순서 정하기 회전 연산이 여러개면, 연산을 수행한 순서에 따라 배열이 달라지기 때문에 연산 순서 조합을 모두 구해야한다. 연산은 최대 6개이기때문에 배열을 미리 만들어놔서 입력받을때 배열에 차례로 저장해두었다. 배열에 연산을 미리 저장해둔 이유는 배열의 인덱스를 이용하여 연산 순서 조합을 구하기 위함이다! 연산순서는 dfs(백트래킹) 방법으로 구했다. 2. 회전 연산하기 제일 많은 시간이 걸렸던 부분.. [SWEA] 1954번: 달팽이 숫자 문제를 연습한다면 좋을 것 같다.. 일단, 1번에서 정한 ..
- 알고리즘문제풀이 [백준] 2468번: 안전 영역 문제 https://www.acmicpc.net/problem/2468 풀이 1. input을 받으면서 HashSet에 지역의 높이정보를 저장했다. HashSet을 이용한 이유는, 중복저장을 하지 않기 위함과 해당 높이를 활용하여 물높이를 높일 것이기 때문이다. 이게 무슨소리냐면, 예를들어, 예제 입력1 같은 경우에는 높이 정보가 골고루 되어있어서 2부터 9까지 반복문으로 물의 높이를 올려가면서 안전영역을 계산할 수 있겠지만 만약에, 4 1 1 1 1 100 100 100 100 1 1 1 1 100 100 100 100 이런 경우면은 1부터 100까지 물의 높이를 1씩 증가하는 것은 비효율적이라고 생각해서 Set에 높이정보를 따로 저장한 것이다. 추가로, HashSet은 HashMap기반으로 만들어져 ..
- 알고리즘문제풀이 [백준] 17141번: 연구소2 문제 https://www.acmicpc.net/problem/17141 풀이 1. 입력으로 주어진 바이러스를 놓을 특정위치 중에 내가 놓을곳 m개를 골라야 한다. 나는 입력을 받으면서 따로 pair place[10]배열에 바이러스를 놓을 좌표를 저장해두었다. DFS로 place배열의 인덱스를 가지고 그 중에 m개의 장소를 골랐다. 2. m개의 장소를 고르고 나면 그 부분을 출발점으로 두어야한다. vis[x][y]는 0으로 두고 큐에 넣는다. (vis배열은 -1로 초기화되어있고, 퍼져나가는 시간을 저장해둘것이다.) m개의 장소에 대해 큐에 모두 넣고 BFS를 시작한다. 3. BFS는 아직 방문하지 않았고(vis == -1), 맵이 0이거나 2인 부분을 방문한다. 4. BFS로 vis배열을 모두 채우고, ..