본문 바로가기

Algorithm

(61)
[백준] 11724번: 연결 요소의 개수 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다. www.acmicpc.net 연결 리스트 연습하려고 푼 문제인데 매트릭스로 만들어도 무방할듯! #include #include using namespace std; class Graph { public: int N; vector adj; vector visited; Graph(int n) : N(n) { adj.resize(N); visited.resize..
[백준] 1012번: 유기농 배추 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. ( www.acmicpc.net DFS로 푼 문제 일단 문제에 나온 것처럼 배추의 위치를 저장하는 2차원 배열을 만들고 (인덱스 범위가 넘어가는 것을 방지하기 위해 ..
[2020카카오공채] 블록 이동하기 https://programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr BFS를 이용해서 푸는 문제! 멍청하게 DFS로 풀었다가 시간초과가 떴다. .. 덕분에 같은 실수 두번은 하지 않을 것 같다. 탐색한 결과를 저장할 배열로 이차원 배열인 way_h, way_v를 선언했다. 아니면 3차원 배열로 선언해줘도 되고.. 상, 하, 좌, 우로 움직이는 경우와 회전하는 경우를 모두 일일히 코딩해줘야 하기 때문에 구현 실수하기 딱 좋은 문제이다. #include #include #incl..
[2020카카오공채] 외벽 점검 https://programmers.co.kr/learn/courses/30/lessons/60062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 으왕.. 다른분들 풀이 참고해가면서 어렵게 푼 문제 순열을 이용해서 푸는 거라고는 생각했지만 순열을 어떻게 구현해야 할지, weak 배열을 어떻게 탐색해야 할지 쉬이 감이 오지 않았다. 순열은 algorithm 헤더에 있는 next_permutation을 이용하면 쉽게 구현할 수 있다. next_permutation에 인자로 배열의 포인터를 넘겨주면 알아서 배열을 다음 순열로 만들어준다. 뿐만 아니라 리턴값으..
[2019 카카오 개발자 겨울 인턴십] 튜플 https://programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 주어진 문자열을 파싱하면서 각각의 숫자가 몇번 나오는지만 카운트하면 쉽게 풀린다. 자주 등장하는 숫자일수록 튜플의 앞쪽에 있는 숫자이기 때문이다. 따라서 각각의 숫자가 몇번 나오는지 카운트 한 뒤, 빈도수를 내림차순으로 정렬하면 구하고자 하는 답이 나온다. (번거롭게 괄호, 쉼표까지 파싱할 필요가 없다) 빈도수를 저장하기 위해 unordered_map을 사용하였고 최종적으로 map의 원소들을 탐색하..
[2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; int col = board[0].size(); vector bd(board.size()); stack bucket; for (int i = board.size() - 1; i >= 0; i--) { for (int j ..
[2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 https://programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 단순히 반복문 돌려가면서 징검다리 숫자를 1씩 빼 주는 방식으로 푸는 문제가 아니라는 것은 너무나도 당연해 보인다. 이 문제는 결국 각 징검다리 숫자에서 n씩 뺐을 때, 0보다 작거나 같은 돌이 최소 연속 k개 있게끔 만드는 n의 최솟값을 구하는 문제이다. => 이걸 더 단순화 시키면, 징검다리의 연속된 돌을 k개 묶어서 돌에 적힌 숫자의 max를 구한 뒤, max 중 가장 작은 값을 구하는 문제와 같다. 예..
[2019 카카오 개발자 겨울 인턴십] 호텔 방 배정 https://programmers.co.kr/learn/courses/30/lessons/64063 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr room_number의 크기가 최대 200,000이므로 단순 반복문으로는 풀 수 없는 문제이다. 이 문제는 유니온파인드를 이용하면 매우 간단히 풀 수 있다. 다만 방의 개수가 무려 10^12개이므로 모든 방에 대해 배열을 선언하는 것은 불가능하다. 따라서 unordered_map을 이용하여 방이 배정되어 merge가 일어나는 경우에만 urordered_map에 데이터를 집어넣었다. #include #inclu..