본문 바로가기

Algorithm/문제풀이_프로그래머스36

[Swift][프로그래머스][해시] 베스트앨범 요구능력 딕셔너리의 활용 및 정렬 문제풀이 아래는 문제의 조건이다. 1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 1번을 처리하기 위해서 dict를 생성하고 ["classic": 1450]과 같이 저장하였다. 그리고 정렬해서 rankDict에 ["classic": 1]과 같이 저장하였다. 다음으로 2번을 처리하기 위해서 uniqueDict를 생성하고 [0 : ("classic", 500)]과 같이 저장하였다. 그리고 rankDict를 활용해서 장르별로 정렬을 해주었다. 이렇게 장르별로 정렬된 것은 sortedUniqueDict에 저장해주었고, sor.. 2022. 4. 19.
[Swift][프로그래머스][완전 탐색] 카펫 요구능력 수학 문제풀이 우리가 이 문제에서 구해야되는건 width와 height이다. width와 height 의 곱이 결국 면적이다. 모든 카펫의 면적은 yellow와 brown의 합이다. 그렇다면, width * height = yellow + brown 이라는 것이다. 우리는 width와 height를 구해야하는데 면적을 가지고 있다. 그렇다면 완전탐색으로 면적을 한번 구해보자. width가 전체면적값을 다 차지하지는 않으니까 1부터 S - 1까지만 탐색을 해보는 것이다. 여기서 우리가 탐색할 필요가 없는 부분이 있다. 바로 면적이 width로 나누어 떨어지지 않는 부분이다. 면적 = width * height인데 나누어 떨어지지 않으면 볼 필요도 없다. 그렇다면 width가 들어왔으니 높이를 구해.. 2022. 4. 18.
[Swift][프로그래머스][완전 탐색] 소수 찾기 요구능력 에라토스테네스의 체, 순열 문제풀이 문제에서 7자리까지 나올 수 있다고 언급했고, 0 ~ 9까지의 숫자가 있을 수 있으니 최악의 경우 9999999가 나올 수 있다. 따라서 소수판별 알고리즘인 에라토스테네스의 체를 이용해서 9999999까지의 소수를 구했다. 그리고 이 문제는 전형적인 순열관련 문제인데, 찢어진 수를 붙이기위해서 String형태로 joined()를 해줬다. 그리고 Int()!로 강제캐스팅해주면서 011과 같은 예외를 처리해준다. 그리고 소수이면 setNum에 저장을 해주는데, Set을 사용한 이유는 중복된 수까지 세지 않기 위해서이다. 후기 무난한 순열문제인데 에라토스테네스를 그냥 크게잡아놔서 시간이 오래걸린다 코드 func solution(_ numbers:String) -> .. 2022. 4. 18.
[Swift][프로그래머스][완전탐색] 모의고사 요구능력 완전탐색, 딕셔너리 문제풀이 문제를 보면 수포자의 명수와 수포자가 문제를 찍는 정답수를 가르쳐준다. 그래서 one, two, three로 반복되지 않는 정답을 적어줬고, dictionary를 활용해서 각자 정답을 얼마나 맞췄는지를 기록해줬다. index가 0부터 시작하니까 각자 개수에 따라서 나머지연산을 해준다면 아무리 answers의 수가 많아져도 계속해서 정답을 맞춰볼 수 있다. 예를들어서 1번 수포자(one)의 경우 [1, 2, 3, 4, 5] 총 5개라서 index는 0 ~ 4이다. 이걸 %5 해주게되면 index가 5일 때는 0이고 6 일 때는 1이된다. 이런식으로 계속해서 정답을 맞춰볼 수 있다. 그리고 이 dictionary의 value값들 중 최대값이 결국 가장 많이 맞힌 수 일 .. 2022. 4. 18.