본문 바로가기

자료구조

(19)
[프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 가사 검색 programmers.co.kr 1️⃣ Trie 📝 풀이 과정 words의 길이는 100,000개, queries의 길이는 100,000개로 단순 탐색시 시간 초과가 발생한다. 다음으로 생각한 풀이는 Trie를 사용하는 방법이었다. words를 모두 Trie에 insert한 다음 queries를 통해 문자열을 검색할 때, 삽입된 문자열의 길이를 모른다면 탐색하기 어렵다. 때문에, Trie의 노드마다 lenMap을 생성하였다. key는 삽입된 문자열의 길이고, value는 해당 길이의 문자열의 개수를 가지고 있다. 따라서 Trie의 node 위치에 도달했을 때, 해당 노드까지 도달..
[프로그래머스] 오픈채팅방 / 2019 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 오픈채팅방 / 2019 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 📝 풀이 과정 한 유저는 유저 아이디 하나와 닉네임을 여러 개 가질 수 있고, 제일 마지막으로 지정한 닉네임을 가져야한다. 때문에 유저 아이디를 Key로 가지면서 닉네임을 Value 값으로 갖는 Map을 만들어주었다. 반복문을 돌며 새로 들어오거나 닉네임을 변경할 때마다 Map에 put을 해주면 자동으로 값이 덮어씌워지기 때문에 별도의 처리를 하지않고 넣어주었다. 모..
[프로그래머스] 순위 검색 / 2021 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 순위 검색 / 2021 KAKAO BLIND RECRUITMENT
[프로그래머스] 메뉴 리뉴얼 / 2021 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 메뉴 리뉴얼 / 2021 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 📝 풀이 과정 메뉴의 코스의 수가 주어지고, 코스의 수별로 가장 많이 시킨 메뉴 조합을 구하는 문제이다. 주문별로 가능한 2이상의 모든 조합을 구한다 조합된 메뉴의 수를 Map에 넣어가며 개수를 누적한다 위의 아이디어로 구현하였다. 먼저 메뉴의 수대로 모아보기 위해 Map courseMap을 생성하였다. 처음 Integer Key는 '메뉴의 수'이고, 이후로는 메뉴의..
[프로그래머스] 튜플 / 2019 카카오 개발자 겨울 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 튜플 / 2019 카카오 개발자 겨울 인턴십 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 📝 풀이 과정 튜플에는 순서가 있지만 집합에는 순서가 없다는 것이 중요하다. {1} {1,2} {1,2,3} 튜플 (1, 2, 3)을 집합으로 만들면 아래와 같이 구성되는데 잘 살펴보면 길이가 하나씩 증가할 때마다 새로운 원소가 들어오게 되는 것을 알 수 있다. 따라서, 집합을 },{로 분할하고 길이에 따라 정렬하면 튜플이 추가되는 순서..
[프로그래머스] 크레인 인형뽑기 게임 / 2019 카카오 개발자 겨울 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 크레인 인형뽑기 게임 / 2019 카카오 개발자 겨울 인턴십 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 📝 풀이 과정 열마다 가장 위에 있는 인형들의 위치를 저장할 top 배열을 만들어 0이 아닌 값(인형이 존재)이 나올 때까지 내려 저장해주었다. 바구니는 위에 계속 쌓이는 형태로 Stack과 구조가 동일해 stack으로 생성해 주었다. moves배열을 하나씩 탐색하며 top[move - 1]이 N과 동일하다면 빈 열이기 때문에 무시하고 넘겨주었고, 인형을 집은 경우 top배열을 하나 증가시켜주고 s..
[프로그래머스] 보석 쇼핑 / 2020 카카오 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 보석 쇼핑 / 2020 카카오 인턴십 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 📝 풀이 과정 Set에 중복이 되지 않도록 모든 보석을 넣어준 뒤, Queue에 차례대로 넣어가며 Queue에 존재하는 보석의 종류수가 Set의 크기와 동일하면 모든 보석을 포함하는 경우이다. Queue에 보석을 하나씩 넣어가며 Map에 현재 보석의 개수를 추가해주었다. 추가하면서 만약 Queue의 제일 앞의 보석의 개수가 1보다 크다면 그 보석이 없더라도 이미 모든 보석을 가지고 있기 때문에 반복해서 제거해주었다. 모든 보석을 포함하고 있으면..
[프로그래머스] 압축 / 2018 KAKAO BLIND RECRUITMENT(3차) - JAVA 🔗 문제 링크 [프로그래머스] 압축 / 2018 KAKAO BLIND RECRUITMENT(3차) 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 📝 풀이 과정 문자열을 반복해서 사전에 넣고 찾는 작업을 해야하고, String(문자열)과 int(색인 번호)를 동시에 저장할 수 있는 Map을 사용하기로 했다. 길이가 1인 문자열을 모두 넣어주기 위해 반복문을 돌며 Map.put 해주었고, 입력 문자열을 하나씩 끊어 반복문을 돌며 탐색하였다. map.containsKey를 통해 만약 현재 key가 사전에 없을 때까지 뒤에 덧붙이는 방식..