본문 바로가기

코딩 테스트

(44)
[프로그래머스] 단어 변환 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..
[프로그래머스] 요격 시스템 with Kotlin 문제 A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다. A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, ..
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT 순위 검색 with Kotlin 문제 Info에는 4가지 항목과 코딩테스트 점수 개발 언어 (cpp, java, python, -) 지원 직군 (backend, frontend, -) 경력 (junior, senior, -) 소울 푸드 (chicken, pizza, -) 점수 query에는 개발팀에서 궁금해하는 조건이 다음과 같이 주어진다. "java and backend and junior and pizza 100" '-' 는 해당 조건을 고려하지 않는다. 지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때, 각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록..
[프로그래머스] 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]..
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 후보키 with Kotlin 문제 위와 같이 2차원 배열로 DB가 주어졌을때, 후보키의 개수를 구하는 문제 후보키란? 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniqueness) : 릴레이션에 있는 모든 튜플에 대해 유일하게 식별되어야 한다. 최소성(minimality) : 유일성을 가진 키를 구성하는 속성(Attribute) 중 하나라도 제외하는 경우 유일성이 깨지는 것을 의미한다. 즉, 릴레이션의 모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성되어야 한다. 즉, 각 행이 중복되지 않고 최소한의 속성만 갖고 있을 때 해당 속성들을 후..
[프로그래머스] 멀리 뛰기(Lv 2) with Kotlin 문제 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 풀이 과정 1칸 : 1가지 2칸 : 2가지 1 1 2 3칸 : 3가지 1 1 1 1 2 2 1 4칸 : 5가지 위의 예제 5칸 : 8가지 1 1 1 1 1 2 1 1 1..
[프로그래머스] 피보나치 수(Lv 2) with Kotlin 문제 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 풀이 과정 피보나치 수는 다이나믹 프로그래밍의 대표적인 문제이므로 DP를 사용하여 해결한다. 코드 class Solution { fun solution(n: Int): Int { val dp = Array(n+1)..