본문 바로가기

코딩 테스트/DFS

(9)
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 불량 사용자 with Kotlin 문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 1. banned_id를 기준으로 가능한 user_id를 HashMap에 저장, key는 banned_id의 인덱스 2. HashMap을 바탕으로 DFS 탐색하여 가능한 조합 List에 저장 3. List에는 중복되는 조합도 있음으로 toSet()을 활용하여 중복 제거 후 크기 반환 코드 class Solution { fun solution(user_id: Array, banned..
[프로그래머스] 단어 변환 with Kotlin 문제 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다.두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환할 수 있는지..
[프로그래머스] 네트워크 with Kotlin 문제 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 풀이 과정 1. 1번 컴퓨터부터 연결되어 있는 N번 컴퓨터 DFS 탐색 2. 탐색한 컴퓨터는 중복탐색하지 않도록 따로 저장 3. 1번과 연결된 컴퓨터들에 대한 탐색이 종료되면 탐색하지 않은 컴퓨터를 기준으로 다시 탐색 코드 class Solution { val checkComputer = ArrayList() fun solution(n: Int, computers: Array): Int { var answer = 0 for(i in computers.indices){ if(checkComputer.contains(i)) cont..
[프로그래머스] N-Queen with Kotlin 문제 가로, 세로의 길이가 n인 체스판이 있다. 체스판 위의 n개의 퀸이 서로 공격할 수 없도록 배치했을 때, 배치할 수 있는 경우의 수 반환 풀이 과정 1. n개의 퀸을 배치해야되기 때문에 각 열에는 무조건 하나의 퀸이 있어야 함 2. 위에서부터 각 열의 칸마다 퀸을 배치하여 서로 공격 가능하면 pass 불가능하면 다음 열 탐색 3. 위에서부터 배치하기 때문에 퀸의 공격은 위로만 체크 코드 class Solution { var answer = 0 fun solution(n: Int): Int { if(n == 1) return 1 val chessboard = Array(n){Array(n){0}} dfs(chessboard, 0) return answer } fun dfs(chessboard: Arr..
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 양궁대회 with Kotlin 문제 라이언과 아파치가 양궁 결승 대회를 한다. 라이언이 챔피언 타이틀을 갖고 있기 때문에 룰은 아파치에게 유리한 쪽으로 적용되었다. 과녁의 점수는 0점부터 10점까지 있으며, 선수는 각 n개의 화살을 지급받는다. 과녁에 맞춘 화살의 개수로 중복 없이 둘 중 한명만 각 점수를 얻을 수 있다. 화살의 개수가 같을 경우 아파치의 점수로 인정된다. 예를 들어 10점 과녁에 아차피가 2발, 라이언이 2발 맞췄다면, 아차피가 10점을 획득한다. 이때, 아파치가 점수 별로 화살을 맞춘 과녁이 배열로 주어졌을 때, 라이언이 아파치를 상대로 가장 큰 격차를 내서 이길 수 있는 경우를 반환하면 된다. 조건 화살은 모두 소진해야 한다. 만약 이길 수 없고, 지거나 비기는 경우뿐이라면 [-1]을 반환한다. 점수 차가 같은 ..
[프로그래머스] 2023 KAKAO BLIND RECRUITMENT 이모티콘 할인행사 with Kotlin 문제 이모티콘 할인율: 10%, 20%, 30%, 40% 유저는 본인이 정한 할인율 이상일 경우에 무조건 이모티콘을 구매한다. 이 때, 구매한 이모티콘 가격이 유저가 정해놓은 가격 이상일 경우 >> 구매했던 이모티콘을 모두 취소하고 카카오 이모티콘 플러스를 구매한다. 이모티콘별로 할인율을 적절히 선택하여 최적의 결과를 도출하여라 결과 -> [이모티콘 플러스 가입 수 , 이모티콘 총 구매 가격] 우선순위는 1번이 이모티콘 플러스 가입 수, 2번이 이모티콘 총 구매 가격 users: [본인이 정한 할인율, 본인이 정한 가격] 입출력 예 users emoticons result [[40, 10000], [25, 10000]] [7000, 9000] [1, 5400] [[40, 2900], [23, 10000]..
[프로그래머스] 광물 캐기 Lv.2 with Kotlin 문제 다음과 같이 3가지 종류의 곡괭이와 광물이 있다. 각 곡괭이로 광물을 캘 때, 위와 같은 피로도가 소모가 된다. 주어진 광물을 순서대로 캘 때, 최소한의 피로도를 구하는 문제 조건 모든 곡괭이는 각각 5번만 사용 가능하다. 한 번 선택한 곡괭이는 5번 사용할 때까지 바꿀 수 없다. 곡괭이가 모두 소진되거나, 광물을 모두 캐면 종료 풀이 방법 다이아 : 25 , 철 : 5, 돌 : 1 DFS로 모든 경우의 수 확인 피로도 = 현재 광물 / 사용중인 도구 (값이 0이면 1) 코드 class Solution { var answer: Int = 0 val hash = hashMapOf("diamond" to 25, "iron" to 5, "stone" to 1) val tools = hashMapOf(0 ..
[프로그래머스] 모음사전 with Kotlin 문제 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요. 제한 사항 word의 길이는 1 이상 5 이하입니다. word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다. 풀이 DFS로 탐색하며 answer ++ , word 단어가 나오면 break 후 answer 반환 코드 class Solution { val words = arrayOf('A', 'E'..
[프로그래머스] 타겟 넘버 with Kotlin 문제 numbers의 배열의 숫자들을 적절히 더하거나 빼서 타겟 넘버를 만들 수 있는 방법을 반환하는 문제 풀이 방법 완전 탐색 DFS로 풀이 numbers = [1,1,1] 이라면 위와 같이 탐색 코드 class Solution { var answer = 0 fun solution(numbers: IntArray, target: Int): Int { //target 에서 numbers의 값들을 빼거나 더해서 최종 0 이면 answer ++ DFS(target, numbers, 0, numbers.size-1) return answer } fun DFS(target: Int, numbers: IntArray, index: Int, check : Int){ for(i in arrayOf(1, -1)){ v..