본문 바로가기
728x90
반응형

Algorithm44

[Programmers] 자물쇠와 열쇠 문제 2020 KAKAO BLIND RECRUITMENT > 자물쇠와 열쇠 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 아이디어 이번 문제는 처음 접했을 땐 풀지 못하고 시간이 흘러 다시 접했을 때 풀게 된 문제였습니다. 풀이 방법은 단순히 회전을 하며 자물쇠를 열 수 있는 모든 경우를 찾는 완전탐색을 하면 되었습니다. 자물쇠는 고정 시키고 열쇠를 좌측 상단부터 우측 하단까지 옮기며 자물쇠를 열 수 있는지를 확인해주면 됩니다. 마치 2차원 배열을 탐색하는 것처럼요. 그림으로 나타내면 이런 모습이 나오겠습니다. 구현 코드 (Java) class Soluti.. 2021. 3. 19.
[Programmers] 괄호 변환 문제 2020 KAKAO BLIND RECRUITMENT > 괄호 변환 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 아이디어 이 문제의 아이디어는 문제에서 제공해주고 있습니다. 문제에서 설명하는 상황에 맞게 코드를 구현하기만 하면 끝인 문제입니다. 굳이 하나를 선택해보자면 재귀 함수를 이용해야 된다고 말할 수 있을 것 같습니다. 구현 코드 (JavaScript) const solve = (val) => { if(val.length === 0) { return ''; } let count = 0; // '('.. 2021. 3. 18.
[Programmers] 문자열 압축 문제 2020 KAKAO BLIND RECRUITMENT > 문자열 압축 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 아이디어 이 문제는 문제를 푼 사람이 많은 것처럼 큰 아이디어를 요구하지 않았습니다. 문자열을 모두 동일한 길이로 잘라낸 뒤 잘라진 문자열 중 동일한 문자열이 있다면 개수를 세어 그에 걸맞은 새로운 문자열을 만들어주기만 하면 됩니다. 다음과 같은 절차를 통해 코드를 작성하면 됩니다. 1. 자를 문자열 길이 탐색 (1~s문자열의 길이/2) 2. 길이만큼 잘라낸 문자열을 모두 탐색하여 .. 2021. 3. 17.
[Programmers] 보행자 천국 문제 2017 카카오코드 예선 > 보행자 천국 코딩테스트 연습 - 보행자 천국 3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6 3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2 programmers.co.kr 아이디어 이번 문제는 DFS/BFS를 이용하여 풀어야 되는 것처럼 보이지만 DP를 이용하여 풀어야만 하는 문제입니다. DP를 활용하는 방법은 간단합니다. city_map배열을 순회하면서 현재 위치에서 다음 위치(오른쪽, 아래)를 이동하는 경우를 생각하거나 또는 이전 위치(왼쪽, 위)에서 현재 위치로 오게 하는 경우를 생각하면 됩니다. 저 같은 경우는 현재 위치에서 다음 위치로 이동하는 경우를 활용하여 풀었습.. 2021. 3. 14.
[Programmers] 단체사진 찍기 문제 2017 카카오코드 본선 > 단체사진 찍기 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 아이디어 이번 문제는 여러가지 아이디어 없이 순열이라는 키워드만 가지고 풀 수 있는 문제였습니다. 카카오프렌즈들의 총 인원수는 8명이었기 때문에 순열을 이용해도 문제가 없었고 순열을 통해 배열된 값을 가지고 data의 조건에 맞는지 체크만 해주면 풀 수 있는 문제입니다. 아이디어를 정리하면 다음과 같습니다. 1. 카카오프렌즈들을 이용한 순열 구하기 2. data의 조건에 맞는지 확인 구현 코드 (Java) cl.. 2021. 3. 13.
[Programmers] 외벽 점검 문제 2020 KAKAO BLIND RECRUITMENT > 외벽 점검 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하 programmers.co.kr 아이디어 이 문제를 풀기 위해 가장 중요하게 생각해야 될 것은 스카피의 친구들인 dist들의 배치 방식입니다. 처음 문제를 접했을 땐 그리디, 동적프로그래밍을 이용해야 되나? 라고 생각했지만 결국엔 순열로 dist들을 배치하여 풀었습니다. dist의 길이는 1이상 8이하이기 때문에 dist들의 순열을 구해도 문제될 것은 없었고 외벽을 점검할 dist의 순서, 탐색 시작 weak, 탐색 방향을.. 2021. 3. 12.
[Programmers] 순위 검색 문제 2021 KAKAO BLIND RECRUITMENT > 순위 검색 2021. 3. 11.
[Programmers] 합승 택시 요금 문제 2021 KAKAO BLIND RECRUITMENT > 합승 택시 요금 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 아이디어 이 문제는 문제를 보자마자 플로이드-워셜을 이용해야겠다는 생각이 났던 문제입니다. 왜냐하면 무지와 .. 2021. 3. 10.
[Programmers] 카드 짝 맞추기 문제 2021 KAKAO BLIND RECRUITMENT > 카드 짝 맞추기 코딩테스트 연습 - 카드 짝 맞추기 [[1,0,0,3],[2,0,0,0],[0,0,0,2],[3,0,1,0]] 1 0 14 [[3,0,0,2],[0,0,1,0],[0,1,0,0],[2,0,0,3]] 0 1 16 programmers.co.kr 아이디어 해당 문제를 처음 접했을 때 어떻게 풀지 막막했었습니다. 여러 생각을 하던 도중 아이디어가 생각나지 않아 질문하기 메뉴를 통해 아이디어를 찾다가 순열을 이용하신 분이 있는 것을 보고 어떻게 풀어내야 할지 아이디어가 생각난 문제였습니다. 코드는 짧지 않지만 풀이법은 생각보다 간단했습니다. 탐색할 카드들을 순열을 통해 순서를 정하고 키 조작 횟수를 최소화하며 순서대로 카드를 찾아 가기.. 2021. 3. 7.
[Programmers] 메뉴 리뉴얼 문제 [프로그래머스] 2021 KAKAO BLIND RECRUITMENT > 메뉴 리뉴얼 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 아이디어 이 문제는 손님들이 주문한 단품 메뉴들의 조합을 어떻게 세부적으로 나눠서 몇 번 주문했는지를 확인하는지가 핵심이라고 생각합니다. 가장 먼저 생각난 방법은 조합입니다. orders 배열의 각 원소의 길이가 n이라고 했을 때 1부터 n개까지 택하는 모든 조합을 구하는 것을 생각했습니다. 조합을 이용해도 문제없이 문제를 풀 수 있다고 생각했지만 1부터 n개까지 모든 조합에.. 2021. 3. 6.
[Algorithm] 최단 경로 탐색(Shortest Path) - 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm) 개요 ◎ 플로이드 워셜 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 (Java) ◎ 시간 복잡도 ◎ 다익스트라 알고리즘과 비교 안녕하세요. J4J입니다. 이번 포스팅은 플로이드 워셜 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 플로이드 워셜 알고리즘이란? 플로이드 워셜 알고리즘은 정점들 간의 최단 경로를 탐색하기 위한 알고리즘 기법으로 시작 정점과 도착 정점 외에도 중간 정점을 선택하여 최소 거리를 탐색하는 방법을 사용합니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정하면 다음과 같이 탐색을 합니다. 1-1. 중간 정점을 A로 선택합니다. 1-2. 모든 정점들 간의 거리를 중간 지점인 A를 거쳐서 가는 거리와 비교하여 최솟값들을 저장합니다. 2-1. 중간 정점을 B로 선택합니다. 2-2.. 2021. 2. 1.
[Algorithm] 최단 경로 탐색(Shortest Path) - 다익스트라 알고리즘(Dijkstra Algorithm) 개요 ◎ 다익스트라 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 시간 복잡도 - 인접 행렬 ◎ 구현 코드 - 힙 (Java) ◎ 시간 복잡도 - 힙 안녕하세요. J4J입니다. 이번 포스팅은 다익스트라 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 다익스트라 알고리즘이란? 다익스트라 알고리즘은 그래프에서 정점 간의 최단 경로를 탐색하기 위해 사용되는 알고리즘 기법으로 시작 정점에서부터 다른 정점들까지 도달하기 위해 필요한 최소 거리를 찾기 위해 사용됩니다. 다익스트라를 이용해 최단 경로를 구하는 식은 D[i][j] = min(D[i][j], D[i][k] + D[k][j])이고 이를 이용해 최단 경로를 구하는 방법은 다음과 같습니다. 예를 들어 A, B, C, D, E 정.. 2021. 1. 31.
[Algorithm] MST - 크루스칼 알고리즘(Kruskal Algorithm) 개요 ◎ 크루스칼 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 (Java) ◎ 시간 복잡도 ◎ 특징 안녕하세요. J4J입니다. 이번 포스팅은 크루스칼 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 크루스칼 알고리즘이란? 크루스칼 알고리즘은 대표적인 MST 구현 알고리즘 중 하나로 정점들 간의 연결된 길(간선)의 가중치를 작은 순서대로 선택하며 MST를 만드는 기법입니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정해보겠습니다. A ↔ C 가중치: 3 A ↔ D 가중치: 5 B ↔ C 가중치: 4 B ↔ D 가중치: 4 C ↔ E 가중치: 2 D ↔ E 가중치: 1 일때 다음과 같은 순서로 가중치를 선택합니다. 1-1. 가중치가 1로 가장 작은 D ↔ E 간선을 임의로 선택합니다. 1-2. .. 2021. 1. 30.
[Algorithm] MST - 프림 알고리즘(Prim Algorithm) 개요 ◎ 프림 알고리즘이란? ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 시간 복잡도 - 인접 행렬 ◎ 구현 코드 - 힙 (Java) ◎ 시간 복잡도 - 힙 ◎ 특징 안녕하세요. J4J입니다. 이번 포스팅은 프림 알고리즘에 대해 적어보는 시간을 가져보려고 합니다. 프림 알고리즘이란? 프림 알고리즘은 대표적인 MST 구현 알고리즘 중 하나로 정점을 기준으로 갈 수 있는 가중치가 가장 작은 길(간선)을 선택한 뒤 다음 정점을 방문하며 MST를 만드는 기법입니다. 예를 들어 A, B, C, D, E 정점이 있다고 가정해보겠습니다. A ↔ C 가중치: 3 A ↔ D 가중치: 5 B ↔ C 가중치: 4 B ↔ D 가중치: 4 C ↔ E 가중치: 2 D ↔ E 가중치: 1 이고 A 정점에서 출발한다면.. 2021. 1. 27.
[Algorithm] 최소 신장 트리(MST, Minimum Spanning Tree) 개요 ◎ 최소 신장 트리란? ◎ 신장 트리란? ◎ 그림 예시 ◎ 신장 트리 특징 ◎ 최소 신장 트리 구현 알고리즘 안녕하세요. J4J입니다. 이번 포스팅은 최소 신장 트리에 대해 적어보는 시간을 가져보려고 합니다. 최소 신장 트리란? 최소 신장 트리는 신장 트리들 중 가중치의 합이 가장 작은 신장 트리를 의미합니다. 여기서 가중치라고 하는 것은 그래프에서 길(간선)을 지나기 위해 지불되는 값이라고 생각하면 됩니다. 예를 들어 A에서 출발하여 C에 도착한다고 가정해 보겠습니다. A→B 가중치: 5 B→C 가중치: 8 이면 A→C로 이동하기 위한 가중치의 합은 13이 되는 것입니다. 신장 트리란? 신장 트리란 최소한의 길(간선)을 이용하여 모든 정점들을 이동 가능하도록 만들어진 트리입니다. 따라서 하나의 그.. 2021. 1. 24.
[Algorithm] 너비 우선 탐색(BFS, Breadth First Search) 개요 ◎ 너비 우선 탐색이란? ◎ 사용 목적 ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 구현 코드 - 인접 리스트 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 너비 우선 탐색(BFS)에 대해 적어보는 시간을 가져보려고 합니다. 너비 우선 탐색이란? 너비 우선 탐색이란 그래프 탐색 기법 중 하나로 한 번 탐색을 시작한 정점에 연결된 모든 정점을(깊이가 같은 정점) 탐색한 뒤 다른 깊이에 있는 정점을 탐색하는 기법입니다. 추가적으로 그래프 탐색에 대해서도 설명드리면 한 정점을 시작으로 다른 존재하는 모든 정점을 한 번씩 방문하는 탐색을 그래프 탐색이라고 합니다. 사용 목적 너비 우선 탐색의 사용 목적은 시작 정점부터 다른 정점까지의 최단 거리를 구하기 위해 사용됩니다.. 2021. 1. 21.
[Algorithm] 깊이 우선 탐색(DFS, Depth First Search) 개요 ◎ 깊이 우선 탐색이란? ◎ 사용 목적 ◎ 그림 예시 ◎ 구현 코드 - 인접 행렬 (Java) ◎ 구현 코드 - 인접 리스트 (Java) ◎ 시간 복잡도 안녕하세요. J4J입니다. 이번 포스팅은 깊이 우선 탐색(DFS)에 대해 적어보는 시간을 가져보려고 합니다. 깊이 우선 탐색이란? 깊이 우선 탐색이란 그래프 탐색 기법 중 하나로 한 번 탐색을 시작한 정점의 최대 깊이까지 탐색을 한 뒤 같은 높이에 있는 다른 정점을 탐색하는 기법입니다. 그래프 탐색에 대해서도 설명을 드리자면 한 정점을 시작으로 다른 존재하는 모든 정점을 한 번씩 방문하는 탐색을 그래프 탐색이라고 합니다. 사용 목적 깊이 우선 탐색을 사용하는 목적은 모든 정점을 탐색하여 원하는 값이 존재하는지 찾기 위해 사용합니다. 대표적인 예는 .. 2021. 1. 18.
[Algorithm] 이분탐색(Binary Search) 개요 ◎ 이분 탐색이란? ◎ 구현 코드 (Java) ◎ 그림 예시 ◎ 사용 목적 ◎ 시간 복잡도 ◎ 조건 ◎ 자바에서 제공하는 메서드 안녕하세요. J4J입니다. 이번 포스팅은 이분 탐색에 대해 적어보는 시간을 가져보려고 합니다. 이분 탐색이란? 이분 탐색이란 여러 탐색 기법들 중 하나로 탐색하는 구간을 두 부분으로 나누어 탐색하는 기법입니다. 탐색을 위해 탐색하는 구간을 두 부분으로 나누지만 실질적으로 탐색은 한 구간만 선택하여 탐색하고 이 행동을 반복하여 찾고자 하는 값을 도출해 내는 방식입니다. 구현 코드 (Java) package search; public class BinarySearch { public static void main(String[] args) { int[] intArray = n.. 2021. 1. 17.
728x90
반응형