본문 바로가기
반응형

프로그래머스9

2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 다중 집합에서 중복 제거를 어떻게 해야할까? 에 대해서 이해가 잘 안되어서 시간이 오래걸렸는데, 아래와 같이 생각하니까 이해하기 쉬웠다. 만약 A = {1, 2, 3}, B = {1, 1, 1, 4} 라고 한다면, A 와 B 의 교집합은 {1} 이 되며, A 와 B 의 합집합은 {1, 1, 1, 2, 3, 4} 가 된다. 왜 저렇게 되지? 라고 생각이 들텐데.. 아래와 같이 이해하면 쉽다. 맨 처음 값을 비교하여 값이 같다면 교집합에 1을 추가해준다. 그리고 해당 값 중 하나를 제거한다. 그리고 다음 값을 비교한다. 값이 같지 않으므로 넘어간다. 이런식으로 모든 값을 순회하면서 체크하게 되면, 중복되는 값이 제거되게 된다. 여기서 주의할 점이.. 2022. 8. 3.
2017 팁스타운 짝지어 제거하기 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 처음에는 문자열을 하나씩 순회하면서 이전 알파벳과 현재 알파벳을 비교해서 같으면 문자열을 제거하는 식으로 구현했는데, 코드를 제출하니 효율성 체크까지 있어서 시간 초과가 났다.. 고민하다가 생각이 안나서 힌트를 참조했는데 Stack 을 이용하면 된다는 글을 보았다. 처음에는 while 문으로 문자열이 모두 사라질 때까지 순회하면서 체크를 했었는데, Stack 을 이용하니까 for 문 한번으로 끝나는거 보고 넘나 어이없었음.. 방법은 간단하다. 맨처음 Stack 에 알파벳을 넣고, 문자열의 알파벳을 하나씩 체크하면서 맨 나중에 Stack 으로 들어간 값이랑 비교 (peek) 하면서 만약 값이 같다면 Stack 에 들어가 있는 알파벳을 제거한다... 2022. 7. 9.
2019 KAKAO BLIND RECRUITMENT 오픈채팅방 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 잘 생각해보면 유저의 아이디는 변하지 않고, 변하는 건 유저의 닉네임이다. 따라서 유저의 아이디 닉네임을 HashMap 으로 저장해놓고, 결과를 출력하기 전에 모든 record 를 순회하면서 HashMap 에 있는 유저의 닉네임으로 변경시켜준 후 결과를 출력하면 쉽게 풀수있다. 먼저 아이디, 닉네임을 저장 할 HashMap 을 하나 만들어준다. Map userIds = new HashMap(); 그 후 record 를 순회하면서 값을 체크해주는데, Leave 의 경우 2 단어 (행동, 아이디) 로 들어오기 때문에 닉네임을 임의로 빈 값으로 지정한다. for (String userInfo : record) { StringTokenizer st .. 2022. 7. 7.
프로그래머스 : 기능개발 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 정답의 개수가 가변적으로 변하므로 ArrayList 로 선언해주었고, 해당 일자에 해당하는 변수를 선언 해 주었다. List answer = new ArrayList(); int day = 0; 그 후 progresses 를 순회하면서 작업의 남은 진도 와 필요한 일 수를 계산하였다. for (int i = 0; i < progresses.length; i++) { int leftProgress = 100 - progresses[i]; // 남은 진도 int requireDay = leftProgress / speeds[i]; // 필요한 일 수 if (leftProgress % speeds[i] != 0) { // 나머지 값이 있으면 1일 .. 2021. 8. 11.
2020 KAKAO BLIND RECRUITENT : 자물쇠와 열쇠 *** 본 풀이는 java언어를 사용하였습니다. *** 문제 보러가기 핵심 요약 Key가 Lock의 구멍에 정확히 일치하는가 (key가 회전 가능) 2차원 배열에 대한 이해 / 깉은 , 얕은 복사에 대한 이해 필요 여러가지 풀이법이 있겠지만 기존 Lock의 크기로 Key를 비교하기엔 여간 까다로운게 아니다. 그럼 어떻게 해야할까? Lock의 크기를 확장하면 된다. Lock의 배열의 크기를 Key가 바로 검증할 수 있는 크기로 확장하고, Lock을 중앙에 배치하면 다음과 같이 Key를 통해 바로 탐색이 가능해 진다. 확장 크기는 lock.length + (key.length - 1) * 2를 통해 확장할 수 있다. 그 후 Key가 확장 배열에 값을 더하면서 Lock의 배열 값들이 모두 1이 들어있는지를 판.. 2020. 1. 23.
2020 KAKAO BLIND RECRUITENT : 괄호 변환 *** 본 풀이는 java 언어를 사용하였습니다. *** 문제 보러가기 핵심 요약 균형잡힌 괄호 문자열 p를 입력받으면, 올바른 괄호 문자열로 변환하라 규칙 설명이 상세하게 잘 되어있어, 규칙대로 하나씩 차근차근 만들어 나가면 무리없이 문제를 풀 수 있을 것이라 생각한다. 규칙은 다음과 같다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다. 4. 문자열 u가 "올바른.. 2020. 1. 21.