완전탐색 5

[프로그래머스] 모음사전_84512

문제 및 코드 1. 생각 // 생각 // 감이 안 잡힌다... 그래서 다른 걸 참고 함 // 구현 // dfs 돌면서 만든 단어들을 담을 list를 만든다 // words를 돌면서 각 words를 시작점으로 해서 dfs를 돈다 // 만든 단어 담긴 list를 돌면서 word와 같은 것의 index를 리턴한다 // dfs // 그 동안 만들어진 단어들 담을 list와 앞으로 담을 단어를 매개변수로 보낸다 // 앞으로 만들 단어가 만들 수 있는 최대 단어 길이보다 크면 함수 종료 // 단어 담을 list에 앞으로 담을 단어 없으면 넣기 // for문으로 words를 돌기 // 재귀적으로 dfs 호출 2. 회고 완전탐색으로 분류되어 있기도 하고 완전탐색이 맞는 것 같긴 한데 이걸 어떻게 풀어야 하는지 도저히 ..

코딩테스트 2023.07.18

[프로그래머스] 전력망을 둘로 나누기_86971

문제 및 코드 1. 생각 // 생각 // 트리 형태로 연결되어 있다, 그리고 예시 사진을 보니 dfs 혹은 bfs로 돌면서 확인하면 될 것 같다 // 시작점에서 연결되어 있는 다른 것들을 다 돌면서 count만 하면 된다 dfs, bfs 딱히 상관 없을 것 같다 // 저번에 재귀 계속 했으니 이번에는 큐로 구현할 수 있는 bfs를 해보자 // 구현 // wires를 돌면서 연결리스트를 만든다 // wires를 돈다 // 해당 원소의 전선을 끊는다 // 시작에서 bfs 돈 값과 끝에서 bfs 돈 값의 차이와 현재 answer 중 최솟값이 answer // 끊었던 전선을 다시 붙인다 // bfs 2. 회고 문제 접근법은 떠올리기 쉬웠다. 그리고 bfs도 저번에 복습해서 구현하는데 어려움은 없었다. 그런데 연..

코딩테스트 2023.07.18

[프로그래머스/자바] 피로도_87946

문제 및 코드 1. 생각 // 생각 // 던전들을 각기 다른 모든 순서로 돌면서 탐험 가능한 최대 던전 개수를 구해야 한다 // 예를 들어 3개라면 123 132 213 231 312 321 ... // 각 던전 for문 돌면서 재귀로 완전탐색하면 되지 않을까? // 구현 // for문으로 던전을 돈다 // 각 던전을 시작으로 해서 순차적으로 다른 던전 돌도록 탐색을 해본다 // 현재 피로도가 최소 필요도보다 크거나 같다 // 현재 피로도 = 현재 피로도 - 소모 필요도 // 현재 피로도가 최소 필요도보다 작다 // 중단 ---- // 생각 // 던전을 돌 수 있는 모든 경우의 수를 돌면서 총 몇 개를 방문할 수 있는지 세어야 함 // 완전탐색, 재귀로 구현 가능 // 구현 // 방문배열 초기화 // 재..

코딩테스트 2023.07.17

[프로그래머스] 카펫_42842

문제 및 코드 1. 생각 도출 // 조건 // 가로는 세로와 같거나 세로보다 더 길다 // 생각 // yellow의 약수를 구해서 약수 짝끼리 yellow 모양이라고 가정하고 가로, 세로, brwon을 구해본다 // yellow의 약수를 모두 구해서 약수 짝끼리 살펴 봐야 하니 완전탐색이 아닐까 // yellow보다 작은 수를 돌면서 약수를 구한다 // 약수가 1이다 // 가로 = yellow + 2, 세로 = 3 // 해당 가로세로의 넓이에서 yellow를 뺀 후 brown을 구한다 // 구한 brown이 주어진 brown과 같으면 // 더 긴 걸 가로로 하고 작은 걸 세로로 한 후 종료한다 // 약수가 1이 아니다 // 첫 번째 약수 + 2, 두 번째 약수 + 2 중 더 긴 것이 가로, 짧은 것이 세..

코딩테스트 2023.07.16

[프로그래머스] 소수찾기_42839

문제 및 코드 1. 생각 도출 모든 경우의 수를 구해서 해당 경우가 소수인지 판별해야 한다. 여기서 모든 경우의 수란 1, 12, 123, 13, 132, ... , 3, 31, 312, 32, 321 과 같이 각 숫자를 연결한 수를 의미한다. 모든 경우의 수를 구해야 하니 완전 탐색이 필요한 상황임을 알 수 있다. 그럼 어떻게 완전 탐색을 진행할 수 있을까? 배열 원소 하나를 기준으로 잡고 그 원소 뒤에 나머지 원소를 붙여 나가면서 모든 경우를 구한다. 이렇게 하면서 배열을 돌면 모든 경우의 수를 구할 수 있다. 그리고 모든 경우의 수를 set에 저장한 다음 set을 돌면서 각 원소가 소수인지 아닌지 판별한다. 경우의 수를 만들다 보면 중복 경우의 수가 나타날 수 있으니 set을 사용해서 저장한다. 그..

코딩테스트 2023.07.14