코딩테스트
-
[프로그래머스] 자물쇠와 열쇠(2020 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 18. 23:03
자물쇠와 열쇠 문제를 풀어보았습니다. 0과 1(홈과 돌기)로 이루어진 2차원 배열 key와 lock이 주어졌을 때, key가 lock의 홈과 돌기에 꼭 맞는 경우 자물쇠를 열 수 있다고 판단합니다. key는 90도 회전이 가능하고, 상하좌우로 이동할 수 있습니다. key의 크기인 M과 lock의 크기인 N이 20 이하로 제한되어있기 때문에, key가 위치할 수 있는 모든 경우의 수를 반복해서 체크했습니다. applyLock이라는 새로운 2차원 배열을 선언했습니다. 크기는 열쇠가 자물쇠의 양 끝에 한 칸씩 걸릴 수 있는 자물쇠 길이 + 2 * (열쇠 길이 - 1)로 생성했습니다. applyLock배열의 정중앙에 lock배열 데이터를 넣습니다. int keyLen = key.length; int lockLe..
-
[프로그래머스] 문자열 압축(2020 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 18. 15:51
프로그래머스에서 문자열 압축 문제를 풀어봤습니다. 문자열이 가장 큰 단위로 압축되는 경우는 문자열 길이의 절반 길이로 자르는 경우이므로 1~문자열 길이/2 까지를 전부 판단하며 결과가 가장 짧은 문자열의 길이를 Return 하는 문제입니다. 현재 위치를 index, 자르고자 하는 단위의 길이를 num이라고 했을때, index부터 num만큼의 길이를 unit변수에 넣습니다.그리고 unit의 다음 위치에 오는 문자열이 unit과 같으면 count변수를 하나씩 증가시키며 index를 이동합니다.더 이상 동일한 문자열이 나오지 않으면 resultStr에 count변수와 unit을 붙여주고, 다음 위치로 이동합니다.남은 문자열이 num보다 짧아 더 이상 이동할 수 없게 되면 나머지 문자열을 resultStr에 붙..
-
[프로그래머스] 괄호 변환(2020 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 10. 17:24
2020년 카카오 채용 코테에 출제된 괄호 변환 문제를 풀어보았습니다. 이 문제는 조금 특이하게 문제에서 알고리즘이 주어지고, 주어진 알고리즘대로 소스 코드를 구현하면 되는 문제였습니다. 위 규칙에 따라서 코딩을 하면 되는 문제인데, 생각해보아야 할 것은 다음과 같습니다. 1. 올바른 괄호/균형 잡힌 괄호 판단 기준 2. 재귀 함수 처리 1. 올바른 괄호/균형 잡힌 괄호 판단 균형 잡힌 괄호는 단순히 여는 괄호'('와 닫는 괄호')'의 개수가 동일한 경우이므로 판단이 어렵지 않았습니다. 올바른 괄호는 여는 괄호와 닫는 괄호의 쌍이 순서에 맞게 이루어져야하므로 Stack을 활용해서 판단했습니다. public String chapterTwo(int strLen, String p){ int balance = ..
-
[프로그래머스] 튜플(2019 카카오 개발자 겨울 인턴십Algorithm 2021. 1. 10. 14:35
프로그래머스에서 2019 카카오 인턴 코테 출제 문제인 튜플을 풀어봤습니다. 이 문제는 예전에 한번 풀었었는데 시간이 많이 지나 기억이 잘 나지 않아서 정리도 할 겸 다시 한번 풀어봤습니다. 당시에 문제 자체를 잘못 이해해서 애먹었던 기억이 나네요ㅎㅎ,,, 순서가 정해진 튜플을 바탕으로 만들어진 집합 배열이 주어지고, 이 배열을 통해 어떤 튜플인지를 찾으면 되는 문제입니다. 이 문제를 풀 때 고려해야할 것들은 다음과 같습니다. 1. 문자열 처리 2. 길이 순 정렬 조건 3. 중복 제거 1. 문자열 처리 주어진 문자열을 '{ }'를 기준으로 잘라줍니다. 아래 두 가지 방법으로 구현해보았습니다. * StringBuffer를 이용해 괄호가 시작되고 끝날 때까지의 데이터를 뽑아 배열에 넣어줍니다. StringB..
-
[프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 9. 21:52
프로그래머스에서 2019 카카오 코테에 출제되었던 후보키 문제를 풀어보았습니다. 주어진 데이터베이스에서 유일성과 최소성을 만족하는 가능한 후보키의 개수를 구하는 문제입니다. 이 문제에서 고려해야 할 사항은 다음과 같습니다. 1. 모든 키(속성)의 조합 2. 키 조합의 부분집합이 후보키에 포함되는가(최소성) 3. 키 조합으로 모든 튜플이 유니크한가(유일성) 여기까지 정리한 후에는 비교적 쉬운 문제라고 생각했습니다.조합 알고리즘을 이용해서 모든 키의 조합을 구하고, 최소성은 Set을 이용해야 한다는 것까지 잘 정리를 했음에도 불구하고 사용해야 하는 자료구조가 많아지다 보니 생각했던 것보다 많이 헤맸네요8ㅅ8 1. 모든 키(속성)의 조합 HashSet과 재귀 함수를 이용해 모든 속성들의 조합을 생성합니다. 재..
-
[프로그래머스] 오픈채팅방(2019 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 9. 12:22
2019 카카오 코테 문제였던 오픈채팅방 문제를 풀어보았습니다. 오픈채팅방에 유저가 들어오고 나간 이력을 이용해, 닉네임 변경이 일어나면 이를 반영해서 메시지를 출력하는 문제입니다. 유저 아이디와 닉네임을 쌍으로 관리한다는 점에서 HashMap 자료구조를 이용해서 쉽게 해결할 수 있었습니다. import java.util.*; class Solution { public String[] solution(String[] record) { ArrayList result = new ArrayList(); HashMap hm = new HashMap(); for(int i=0; i
-
[프로그래머스] 수식 최대화(2020 카카오 인턴십)Algorithm 2021. 1. 8. 22:12
프로그래머스에서 2020 카카오 인턴십 코테 출제 문제였던 수식 최대화 문제를 풀어보았습니다. +, -, * 3가지의 연산자만을 포함하는 수식이 주어졌을 때, 연산자의 우선순위를 재정의하여 산출할 수 있는 가장 큰 수를 구하는 문제입니다. 이 문제를 풀기 위해서 고려해야 하는 사항은 다음과 같습니다. 1. 우선순위 조합 만들기 2. 순서에 따라 수식 계산하기 1. 우선순위 조합 만들기 우선순위의 조합은 순서가 있는 조합이므로 순열을 이용합니다. n개 중 r개를 골라 순서가 있는 조합을 만드는 경우에는 아래 코드의 for 문을 n번, if 문에서의 depth조건을 r로 설정하면 됩니다. 이 문제의 경우에는 3개의 연산자 중 3개를 모두 사용해서 순서를 뽑으므로 3을 하드 코딩했습니다. 재귀 함수를 통해 모..