Algorithm/Programmers
-
Programmers) Lv3 [2020카카오공채] 자물쇠와 열쇠Algorithm/Programmers 2020. 4. 3. 21:13
출처: https://programmers.co.kr/learn/courses/30/lessons/60059#qna 분류: Lv3, 2020 카카오 공채 접근방식 배열의 크기가 3~20 으로 범위가 크지 않기 때문에 각각의 케이스를 맞춰가면서 됩니다. 핵심 포인트는 3가지 입니다. 1. lock 과 key 를 맞춰서 열 수 있는지 확인할 수 있어야 합니다. 2. 주어진 범위 안에서 key를 이동시킬 수 있어야 합니다. 3. key 를 회전시킬 수 있어야 합니다. 주의할 점은 범위를 설정할 때, key의 끝 부분이 lock의 시작 점에 오는 점부터 key의 시작 부분이 lock의 끝 점에 오는 점까지 를 확인해야 합니다. 문제의 예처럼 key와 lock이 둘 다 (3,3) 인 배열이라면, key의 끝 부분..
-
Programmers) Lv2 [2020카카오공채] 괄호 변환Algorithm/Programmers 2020. 3. 25. 15:04
출처: https://programmers.co.kr/learn/courses/30/lessons/60058 분류: Lv2 접근방식 문제에서 알고리즘 방법을 단계별로 잘 나눠서 알려주고 있습니다. 잘 읽고 "그대로" 구현만 잘 하면 되는 문제 입니다. (그치만 그게 어렵네요 😭) 포인트라면 반복적인 재귀형태가 들어가기 때문에 기능별로 함수를 쪼개서 구현하는 능력이 필요할 것 같네요. 출제의도 역시 다음과 같습니다. 주어진 로직을 그대로 구현할 수 있는지 파악 재귀함수를 이해하고 작성할 수 있는지 파악 해결방법 저는 주요 기능 (함수)을 크게 4가지로 나눠봤습니다. 1. 문자열을 쪼개는 1 ~ 4 번을 수행하는 함수 (trimming) func trimming(_ p: String) -> String { ..
-
Programmers) Lv2 [2020카카오공채] 문자열 압축Algorithm/Programmers 2020. 3. 16. 15:24
출처: https://programmers.co.kr/learn/courses/30/lessons/60057 분류: Lv2 문자열 접근방식 문자열의 길이 N의 절반 이상으로 자르면 압축할 수가 없습니다. 주의 할 개념은 이정도 나머지는 구현이 핵심입니다. 카카오 테스트 해설의 출제의도는 다음과 같습니다. 문자열을 다룰 수 있고, 아래 예시와 같이 문자열과 관련된 다양한 작업을 할 수 있는지 파악 문자열 자르기 부분 문자열 얻기 문자열 비교하기 문자열 길이 얻기 Swift 는 문자열 다루기가 상대적으로 까다로운데 자유자재로 사용하려면 역시 많은 연습이 필요하겠습니다 😥 해결방법 1 ~ N/2 까지 잘라가며 압축 문자열의 길이가 가장 작은 값을 찾아냅니다. 앞에서부터 압축 문자열의 길이로 잘라내면서 중복을 ..
-
Programmers) Lv2 스킬트리Algorithm/Programmers 2020. 3. 15. 16:40
출처: https://programmers.co.kr/learn/courses/30/lessons/49993 분류: Lv2 접근방식 선행 스킬에 없는 스킬은 무시하면 되고 선행 스킬의 스킬을 순서대로 배우는지 확인하면 되는 문제입니다. 해당 키값(스킬)에 빠르게 접근할 수 있는 자료구조가 필요하다고 생각했고 해시를 떠올렸습니다. 해결방법 따라서 가장 먼저 배워야 하는 선행 스킬만 true 나머지는 false로 해서 Dictionary로 만들었습니다. 그 후 true인 스킬을 확인하고 나면 그 다음 선행 스킬을 true로 만들어줍니다. 선행 스킬이 모두 true가 되면 그 스킬 트리는 배울 수 있으므로 카운팅해주고 넘어갑니다. 당연히 선행 스킬에 없는 스킬은 nil 값이므로 넘어가면됩니다. func sol..
-
Programmers) Lv3 섬 연결하기Algorithm/Programmers 2020. 3. 6. 19:39
출처: https://programmers.co.kr/learn/courses/30/lessons/42861 분류: Lv3 , Greedy MST의 대표적인 문제입니다!!! Prim 알고리즘으로 해결해봤는데요. 자세한 설명은 이론 설명 그 자체일 듯 합니당 다음글을 참고해주세용 :) /** * 현재 노드에 연결되어 있는 노드만 확인할 것이기 때문에 * 간단하게 목적지와 비용만 저장하는 Edge 를 정의합니다. */ struct Edge { var destination: Int var cost: Int } func updateDist(_ tree: [Edge], dist: inout [Int?]) -> [Edge] { for edge in tree { if let d = dist[edge.destinati..
-
Programmers) Lv2 조이스틱Algorithm/Programmers 2020. 1. 29. 16:50
출처: https://programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 | 프로그래머스 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 예를 들어 아래의 방법으로 JAZ를 만들 수 있습니다. - 첫 번째 위 programmers.co.kr 분류: Lv2, Greedy 너무너무 어려웠던 문제... 하 어렵네..
-
Lv2 위장Algorithm/Programmers 2019. 12. 30. 16:58
출처: https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 | 프로그래머스 programmers.co.kr 분류: Lv2 해시 처음엔 쉬워보였지만 개인적으로 꽤 어려웠던 문제였습니다... "중복된 이름은 없으니 분류별로 개수만 카운팅하면 되겠다" 라고 생각하며 접근했지만 그 이후 경우의 수를 어떻게 계산해야 할 지가 문제였습니다. 단순히 종류별 개수로 곱하면 경우를 다 포함하지 못하고.. 종류별로 1개를 뽑는 경우, 2개를 뽑는 경우 ... 로 나눠보자니 종류별로 개수가 다르고.. 결국 다른 분들의 풀이를 찾아보았습니다. 이 문제의 가장 큰 포인트는 의상을 최소 1개만 선택하면 더 이상을 뽑지 않아도 된다는 것입니다. 1개만 뽑으..
-
Lv2 쇠막대기Algorithm/Programmers 2019. 12. 24. 15:46
출처: https://programmers.co.kr/learn/courses/30/lessons/42585 코딩테스트 연습 - 쇠막대기 | 프로그래머스 여러 개의 쇠막대기를 레이저로 절단하려고 합니다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자릅니다. 쇠막대기와 레이저의 배치는 다음 조건을 만족합니다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있습니다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓습니다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재합니다. - 레이저는 어 programmers.co.kr 분류: Lv2 스택/큐 닫히는 ")"를 만났을 때 이게 레이저인지 ..