본문 바로가기

알고리즘 풀이

(84)
[프로그래머스] 불량 사용자 / 2019 카카오 개발자 겨울 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 불량 사용자 / 2019 카카오 개발자 겨울 인턴십 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 무지는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 📝 풀이 과정 banned_id에 해당하는 아이디를 하나씩 고를 수 있는 조합을 찾는 문제이다. banned_id에 존재하는 *을 .으로 변경한다면 쉽게 정규식을 사용이 가능하다. 이후, str.matches(pattern)을 사용해 문자열이 패턴과 일치 여부를 boolean값으로 받아올 수 있다. 조합을 모두 구했다고 하더라도 중복된 아이디들로 구성된 목록은 제거해주어야하는데 이를 ..
[프로그래머스] 튜플 / 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 카카오 인턴십 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 📝 풀이 과정 시작점인 [0, 0]부터 [N - 1, N - 1]까지 경주로를 건설해 최솟값을 구하는 문제다. 단, 경..
[프로그래머스] 보석 쇼핑 / 2020 카카오 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 보석 쇼핑 / 2020 카카오 인턴십 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 📝 풀이 과정 Set에 중복이 되지 않도록 모든 보석을 넣어준 뒤, Queue에 차례대로 넣어가며 Queue에 존재하는 보석의 종류수가 Set의 크기와 동일하면 모든 보석을 포함하는 경우이다. Queue에 보석을 하나씩 넣어가며 Map에 현재 보석의 개수를 추가해주었다. 추가하면서 만약 Queue의 제일 앞의 보석의 개수가 1보다 크다면 그 보석이 없더라도 이미 모든 보석을 가지고 있기 때문에 반복해서 제거해주었다. 모든 보석을 포함하고 있으면..
[프로그래머스] 수식 최대화 / 2020 카카오 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 수식 최대화 / 2020 카카오 인턴십 📝 풀이 과정 연산자의 우선순위를 permutation을 사용해 모든 경우를 구한 뒤, 우선순위가 높은 연산자를 먼저 계산해 누적하는 방식으로 계산하였다. 계산기를 구현할 때 사용하는 방식으로 연산자를 Stack에 쌓아 현재 쌓인 연산자의 우선순위 이하의 연산자가 들어온 경우 계산해 누적하였다. 💡 StringTokenizer는 생성할 때, new String(String str, String delim, boolean returnDelims)로도 생성할 수 있다. str에서 delims에 포함된 character를 기준으로 분할한다 (String 기준❌) returnDelims가 true일 경우 delims도 token으로 취급해 반..
[프로그래머스] 키패드 누르기 / 2020 카카오 인턴십 - JAVA 🔗 문제 링크 [프로그래머스] 키패드 누르기 / 2020 카카오 인턴십 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 📝 풀이 과정 1 2 3 4 5 6 7 8 9 *(10) 0(11) #(12) 계산을 쉽게 하기 위해 키패드를 모두 숫자로 취급하였다. 1~9까지 숫자키패드는 그대로 두고, *, 0, # 등의 키패드를 10, 11, 12로 보았다. 따라서, 제일 처음 왼손은 10, 오른손은 12에 ..
[프로그래머스] 신규 아이디 추천 / 2021 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 신규 아이디 추천 / 2021 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 카카오계정개발팀에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. 네오에게 주어진 첫 업무는 새로 가 programmers.co.kr 📝 풀이 과정 문제를 보고 정규식을 활용할 수 있는 문제라고 생각해 정규식을 사용하기로 했다. 조건을 차례대로 보면, 1번은 toLowerCase()를 사용해 문자열을 소문자 형태로 변경이 가능하다 2번부터 4번까지는 replaceAll(regex, replacement)를 사용했는데 regex에 변경하고자하는 정규식을 입력하고 replacement에 변경..