티스토리 뷰
프로그래머스 2단계 연습문제, 롤케이크 자르기 개요
오늘 풀어볼 문제는 프로그래머스 2단계 연습문제, 롤케이크 자르기입니다.
[Int] 타입 배열이 주어질때, 배열을 두개의 subarray로 자를때 양쪽 배열에 포함된 숫자의 가짓수가 동일한 경우의 수를 구하는 문제입니다.
예를들어,
[1, 2, 1, 3, 1, 4, 1, 2] 가 있다면, [1, 2, 1, 3] / [1, 4, 1, 2]로 자르면 좌우 subarray의 숫자 가짓수는 각각 3개
[1, 2, 1, 3, 1] / [4, 1, 2]로 자르면 좌우 subarray의 숫자 가짓수는 각각 3개로 같게 됩니다.
최종적으로 2가지 케이스가 있으며, 이 경우 2를 반환하면 됩니다.
해당 문제는 단순히 딕셔너리 자료구조를 사용해서 숫자의 빈도수를 카운팅하면 해결할 수 있었습니다. 바로 문제를 풀어보겠습니다.
프로그래머스 2단계 연습문제, 롤케이크 자르기 swift 언어로 풀기
dictionary 사용하여 푸는 방법
먼저, 배열에 들어있는 전체 element의 숫자 별 빈도수를 기록하여 dic에 넣었습니다. 이어서 dictionary, dic2를 선언했습니다.
dic2는 toppinig을 다시 순회하면서 배열을 잘랐을때의 좌측 subarray의 element 빈도수를 기록하기위해 사용되며, dic은 배열을 잘랐을때의 우측 subarray의 element 빈도수를 기록하기 위해 사용하려고 합니다.
7 ~ 10행) topping 배열을 순회하면서 각각의 원소에 대해서 dic2에서는 빈도수를 증가하도록 기록하고, dic는 반대로 카운팅을 감소시킵니다. 이렇게 연산을 하면 즉 현재 순회중인 element의 바로 우측을 기준으로 배열을 잘랐을때의 케이스를 확인할 수 있게 됩니다.
* 여기에서 유의할 점은 dic dictionary의 element 카운팅을 감소시켰을때, 0이 되면 nil을 할당시켜주어야 합니다. 해당 element의 빈도수가 0이 되어있음에도 카운팅이 되어 잘못된 결과를 얻을 수 있기 때문입니다.
11행) dic(배열을 잘랐을때 우측 subarray 숫자 가짓수), dic2(배열을 잘랐을때 좌측 subarray 숫자 가짓수)가 같은지 확인합니다. 같으면 양쪽 가짓수가 동일하므로 1을 증가시킵니다. 그렇게 최종적으로 ans는 배열을 잘랐을때 좌우 subarray의 숫자 가짓수가 동일한 경우의 수를 갖게 되며 그 최종값을 반환하며 문제를 해결할 수 있습니다.
많은 의견 부탁드립니다. 감사합니다.
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
프로그래머스 코테 String, Hash 연습문제 호텔 대실 풀이 (0) | 2023.02.07 |
---|---|
프로그래머스 2단계, 무인도 여행 DFS 알고리즘 문제 풀이 (0) | 2023.02.02 |
백준 13565 침투, DFS 깊이우선탐색 swift언어 문제풀이 (0) | 2022.02.07 |
백준 2331, 반복수열 swift dictionary, 거듭제곱 풀이 (0) | 2021.12.25 |
백준 1799, 비숍 백트래킹 backtracking 스위프트 문제풀이 (0) | 2021.12.21 |
- Total
- Today
- Yesterday
- 부스트코스
- 스위프트
- swift
- CoreML
- 백준swift
- 알고리즘
- 김프매매
- swift 기초
- 컬렉션
- 개발자문서
- SwiftUI
- swift알고리즘
- swift언어
- swift string
- publisher
- uikit
- ios
- createML
- 프로토콜
- Swift 알고리즘
- swift reduce
- Collection
- 프로그래머스
- 알고리즘문제
- 백준알고리즘
- swift문제
- Protocol
- swift 문자열
- 프로그래머스swift
- 자연어처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |