https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 해설 : 손님의 단품요리 주문내역 orders와 코스로 구성할 가짓수 course 배열이 주어질 때, 각 코스마다 어떤 조합으로 코스를 구성해야 가장 잘 팔릴지 선택하는 문제이다. 손님이 단품으로 주문한 메뉴들의 조합을 통해 어떤 코스가 가장 인기있을지 유추해야 한다. 풀이 : 각 손님의 주문내역에서 가능한 요리의 조합을 list에 전부 append한다. 이후 C..
https://programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 해설 : 1부터 row * column의 값으로 채워진 2차 행렬과 회전시킬 테두리의 x1,y1,x2,y2 좌표가 주어질 때, 이 행렬의 테두리를 회전시키며 변경된 값 중에 가장 작은 값을 찾는 문제이다 풀이 : 행렬을 회전시킬 때 테두리 4개에 대해 회전하는 로직을 구현하였다. 이 때, 겹치는 부분인 각 꼭짓점은 따로 저장을 하여 겹치는 문제..
https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 해설 : 문자열 s가 주어질 때 연속된 문자 2개가 나올 경우 이를 짝지어 제거한다. 이 과정을 반복하면 최종적으로 문자열을 빈 문자열로 만들 수 있는지 찾는 문제이다. 풀이 : stack을 사용하면 쉽게 해결할 수 있는 문제이다. 문자열 s의 앞에서부터 stack에 넣으며, 넣을 때마다 stack의 top과 비교하고 같으면 stack에서 빼준다. ..
https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 해설 : 중복이 있는 수 배열이 주어진다. 이 때, 중복이 아닌(겹치지 않는) 숫자를 고르는 경우의 수를 출력하면 된다. 풀이 : 쉬운 문제이다. 중복을 제거하기 위해 수 배열을 set으로 처리해주었고 이 set의 길이와 전체 배열의 길이를 2로 나눈 값 중 작은 수를 출력하면 된다. 12def solution(nums): return min(len(set(n..
https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 해설: 그래프 vertex사이의 간선정보가 주어질 때 1번째 노드에서 가장 멀리 떨어져있는 노드가 몇 개인지를 return하면 된다. 풀이: vertex사이의 간선정보를 통해 n개의 노드 사이에 연결정보를 담은 list를 새로 만든다. 이 list를 BFS로 전체탐색하여 이미 탐색한 node의 정보를 1번노드로부터의 거리로 초기화시켜준다. 모든 탐색을 마치고 거리정보가 담긴 list의 max을 카운팅해주면 된다. 1234567891..
https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 해설 : 입국심사관들이 입국심사하는데 걸리는 시간들이 담긴 배열과 입국심사를 받아야 하는 사람의 수 n이 주어질 때, 모든 사람을 입국심사하는데에 걸리는 최소 시간을 찾는 문제이다. 풀이 : 이분 탐색(Binary Search) 문제이다. 너무 어려웠다. 처음 봤을 땐 이분 탐색을 사용해야겠다는 생각은 1도 들지 않았고 그리디, 또는 브루트포스를 사용하여 모든 경..
https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 해설 : 사용할 수 있는 수들이 담긴 배열과 targetNumber가 주어질 때 주어진 배열의 수들을 덧셈 혹은 뺄셈 연산하여 타겟 넘버를 만들 수 있는 경우의 수를 찾는 문제이다. 풀이 : DFS(깊이우선 탐색)를 사용해서 해결할 수 있는 문제이다. 재귀함수의 매개변수로 현재 값, 현재 값을 만들기 위해 사..
https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 해설 : 주어진 수 N을 사칙연산만으로 조합하여 targetNumber를 찾는데에 몇 번의 연산이 필요한지 찾는 문제이다. 풀이 : 사칙연산을 진행하며 나온 결괏값을 중복을 방지하기 위해 set 자료구조로 list에 append 한다. 이 결괏값 배열의 원소들에 반복적으로 N으로 사칙연산을 수행하여 targetNumber가 나올 때까지 횟수를 카운팅한다. 123456789101112131415161718192021def solution(N, number): S = [0, {N}] if N == number: return 1 for i in ..
https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 해설 : 총 인원, 체육복을 잃어버린 사람, 여분 체육복이 있는 사람의 배열이 주어질 때, 여분 체육복이 있는 사람은 양 옆의 사람에게 체육복을 빌려줄 수 있다. 이 때 최대한 많은 사람이 체육복을 사용하는 경우를 찾는 문제이다. 풀이 : 그리디 알고리즘을 사용하여 해결하는 문제이다. 체육복을 빌려줄 때, 왼쪽에 있는 사람부터 빌려줘야 가장 많이 빌려줄 수 있는 ..