본문 바로가기

분류 전체보기52

프로그래머스(미해결) - C++ 소수찾기 완전탐색을 이용하는 문제이다. 2021. 10. 9.
프로그래머스 - C++ 조이스틱 Greedy를 이용하여 해결하는 문제이다. 조이스틱의 위/아래 방향 이동은 간단하게 해결하였지만, 오른쪽/왼쪽 방향 이동이 이 문제의 핵심이다. 다음은 조이스틱을 오른쪽/왼쪽으로 이동할 지 결정하는 방법이다. 오른쪽/왼쪽 이동횟수가 최소가 되는 상황은 아래의 3가지 이다. 1. 한쪽 방향으로만 이동할 때가 최소 ex)JEROEN 2. 'A' 로만 이루어진 문자열의 왼쪽을 먼저 탐색한 뒤 되돌아가 오른쪽을 탐색할 때가 최소 ex) BBAAAAAAABBBB 3. 'A' 로만 이루어진 문자열의 오른쪽을 먼저 탐색한 뒤 되돌아가 왼쪽을 탐색할 때가 최소 ex) BBBBAAAAAAABB 1번의 경우, 이동횟수는 name.length() - 1 이 될 것이며, 2번의 경우, 왼쪽탐색 + 왼쪽탐색 + 오른쪽탐색 3번.. 2021. 10. 9.
프로그래머스 (미해결) - C++ 단어변환 DFS를 이용하는 문제이다. DFS 함수를 구현할 때, 코드의 flow를 잘 생각하자. 1) words의 값 마다 count 변수를 초기화 해야한다. 2) 매개변수인 begin은, 이전 DFS에서 조건을 만족했던 words[i]이다. 그렇기 때문에 다음 DFS를 수행할 때 words[i]가 begin이 되어 return될 때 까지 DFS 함수를 수행할 것이다. (코드의 flow를 잘 생각하자) 1. Solution 코드 #include #include using namespace std; int answer = 100; void DFS(string begin, string target, vector words, vector& useCheck, int count = 0){ for(int i = 0; i <.. 2021. 10. 5.
프로그래머스 - c++ 네트워크 DFS를 이용하는 문제이다. 그 중에서도, 그래프의 모든 노드가 연결되어 있지 않은 경우를 해결하는 문제이다. 모든 노드를 방문하기 위해서 solution()에서 for문을 사용하여 DFS를 호출해야한다. 1. Solution 코드 #include #include using namespace std; void DFS(int n, vector computers, int computer, vector& visit){ visit[computer] = true; for(int i = 0; i < n; i++){ if(!visit[i] && computers[computer][i] == 1) DFS(n, computers, i, visit); } } int solution(int n, vector computer.. 2021. 10. 3.