알고리즘(15)
-
[Swift - 프로그래머스] 순위
🤔 풀이 과정 n명의 권투선수가 등장하고 1부터 n까지 번호를 매기는데요. 그들 간의 1대 1 매칭 결과가 results배열을 통해 주어집니다. 각각의 배열에는 승자와 패자의 원소를 순서대로 담은 배열로 주어집니다. 이 정보를 그래프로 표현하고 각각의 선수마다 DFS로 그래프 탐색하며 자신보다 강한 사람의 수, 자신보다 약한 사람의 수를 구해보고 그 합이 n - 1이 되면 순위를 알 수 있다고 판단할 수 있겠습니다. 먼저 권투 선수의 수만큼 자신보다 강한 사람의 수와 자신보다 약한 사람의 수를 저장할 배열 두 개를 만들어주고 경기결과를 바탕으로 인접 리스트 형태로 그래프를 표현해보았습니다. 오렌지색을 기준 선수라고 하였을 때 분홍색은 해당 선수보다 약한 선수들의 리스트입니다. 이제 각각의 선수를 기준으로..
2021.06.10 -
[Swift - 프로그래머스] 불량 사용자
🤔 풀이 과정 user_id와 banned_id가 String 배열의 형태로 주어지게됩니다. banned_id를 기준으로 user_id를 탐색하며 매칭되는 id들의 인덱스들을 묶어서 저장해준뒤 매칭 가능한 모든 케이스의 수를 구하는 문제였습니다. 조합은 재귀함수를 통해서 구해보았으며 하나의 banned_id와 매칭되는 user_id의 인덱스들을 오름차순으로 정렬한 뒤 Set에 저장하여 중복을 제거하였습니다. 📦 문제 풀이 & 코드 import Foundation func solution(_ user_id: [String], _ banned_id: [String]) -> Int { // 인덱스끼리 매칭, 배열의 인덱스는 banned_id의 인덱스,값은 매칭되는 user_id들의 인덱스 배열 var matc..
2021.06.09 -
[Swift - 프로그래머스] 섬 연결하기
🕵🏻 문제 해석 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2 이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다. 같은 연결은 두 번 주어지지 않습니다. 또한 순서가 바뀌더라도 같은 연결로 봅니다. 모든 섬 사이의 다리 건설 비용이 주어지지 않습니다. 이 경우, 두 섬 사이의 건설이 불가능한 것으로 봅니..
2021.06.07 -
[Swift - 프로그래머스] 자물쇠와 열쇠
🕵🏻 문제 해석 고고학자인 "튜브"는 고대 유적지에서 보물과 유적이 가득할 것으로 추정되는 비밀의 문을 발견하였습니다. 잠겨있는 자물쇠는 격자 한 칸의 크기가 1 x 1인 N x N 크기의 정사각 격자 형태이고 특이한 모양의 열쇠는 M x M 크기인 정사각 격자 형태로 되어 있습니다. 자물쇠에는 홈이 파여 있고 열쇠 또한 홈과 돌기 부분이 있습니다. 열쇠는 회전과 이동이 가능하며 열쇠의 돌기 부분을 자물쇠의 홈 부분에 딱 맞게 채우면 자물쇠가 열리게 되는 구조입니다. 자물쇠 영역을 벗어난 부분에 있는 열쇠의 홈과 돌기는 자물쇠를 여는 데 영향을 주지 않지만, 자물쇠 영역 내에서는 열쇠의 돌기 부분과 자물쇠의 홈 부분이 정확히 일치해야 하며 열쇠의 돌기와 자물쇠의 돌기가 만나서는 안됩니다. 또한 자물쇠의 ..
2021.06.03 -
[Swift - 프로그래머스] 다단계 칫솔 판매
🕵🏻 문제 해석 민호는 다단계 조직으로 칫솔을 판매하는 사업을 하고 있습니다. 이 피라미드 식의 조직은 판매원이 칫솔을 판매하였을 때, 그 수익금의 10%를 자신을 소개해준 판매원에게 분배합니다. 분배받은 판매원도 누군가의 소개를 받았었다면 분배받은 금액의 10%와 자신의 수익금 10%을 마찬가지로 분배합니다. 이런 식으로 모든 판매원의 수익금을 정산하였을 때, 그 금액을 리턴하는 문제입니다. 문제에서 제공하는 예시를 봅시다! 판매원 판매 수량 수익금 young 12 1,200원 john 4 400원 tod 2 200원 emily 5 500원 mary 10 1,000원 문제에서 주어진 수익금과 소개 구조를 바탕으로 조직도를 그려봤습니다. 파란색으로 칠해진 사각형들은 칫솔을 판매하여 수익금이 발생한 판매원..
2021.06.02 -
[Swift - 프로그래머스] 합승 택시 요금
🕵🏻 문제 해석 무지와 어피치는 최근 잦아진 야근 때문에 택시를 타고 귀가하는 일이 늘어났습니다. 그래서 택시를 같이 타고 귀가하여 요금을 최대한 줄여보려고 합니다. 함께 출발하는 지점 s, 그리고 각자의 집이 위치하는 a, b 지점과 지점과 지점 사이의 예상요금이 fare 배열로 주어질 때 최소요금을 계산해봅시다. [제한사항] 지점갯수 n은 3 이상 200 이하인 자연수입니다. 지점 s, a, b는 1 이상 n 이하인 자연수이며, 각기 서로 다른 값입니다. 출발지점, A의 도착지점, B의 도착지점은 서로 겹치지 않습니다. 요금 f는 1 이상 100,000 이하인 자연수입니다. 출발지점 s에서 도착지점 a와 b로 가는 경로가 존재하는 경우만 입력으로 주어집니다. 🤔 풀이 과정 먼저 문제를 읽고 그래프 문..
2021.06.01