티스토리 뷰

반응형

 

 

프로그래머스 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를 반환하면 됩니다.

해당 문제는 단순히 딕셔너리 자료구조를 사용해서 숫자의 빈도수를 카운팅하면 해결할 수 있었습니다. 바로 문제를 풀어보겠습니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


프로그래머스 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의 숫자 가짓수가 동일한 경우의 수를 갖게 되며 그 최종값을 반환하며 문제를 해결할 수 있습니다.

 


많은 의견 부탁드립니다. 감사합니다. 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함