본문 바로가기
CS/알고리즘 & 문제풀이

[Python] 백준 2173 양파깡 만들기

by mintropy 2022. 1. 13.

문제 링크 : https://www.acmicpc.net/problem/2173

 

2173번: 양파깡 만들기

(주) 넝심에서는 양파링의 아성에 도전할 만한 아이디어 과자인 양파깡을 만들어냈다. 양파깡은 기존의 양파링과는 달리 직사각형의 모양을 갖는 과자이다. 그런데 (주) 넝심의 과자 기술은 그

www.acmicpc.net

 

1. 접근 방법

브루트 포스 하게 접근해야 했다.

모든 가능한 경우를 각 순간마다 따져봐야 하기에, 가능한 모든 모양일 미리 저장해 두고, 불가능한 경우는 쳐내는 방식으로 진행했다.

 

2. 풀이 코드

🖥python 코드 링크 : https://github.com/mintropy/baekjoon_py/blob/master/2000/2100/2173.py

 

GitHub - mintropy/baekjoon_py

Contribute to mintropy/baekjoon_py development by creating an account on GitHub.

github.com

📕코드 해설

이번 문제는 함수 구조로 하여 해결했다.

solution

  ↓

calc_prefix_sum

  ↓

get_yangpakkangs

  ↓

find_M_yangpakkangs ↔ yangpakkang_check

형태로 구조를 잡았다. 각 함수에 대한 설명은 다음과 같다

1. solution : 가장 루트가 되는 함수로, 모든 함수 실행과 출력 부분을 담당한다

2. calc_prefix_sum : 가능한 양파깡 모양을 저장하기 위해 세로, 가로 누적합을 구했다

    이 과정에서 세로 누적합을 구할 때, zip함수와 itertools.accumulate 함수를 사용하여 구했다

3. get_yangpakkangs : 가능한 모든 양파깡 모양에 대한 맛을 저장했다

4. find_M_yangpakkangs : 맛이 가장 높은 양파깡부터 순서대로 선택할 수 있는지 확인하여 M개를 선택한다

5. yangpakkang_check : 각 순서의 양파깡에 대하여, 이전에 선택한 양파깡의 위치를 확인하여 가능한지 확인한다

 

 

3. 생각 정리

두 가지 부분에서 재미있게 접근하고 풀었다.

첫 번째로 함수 구조를 쌓아가는 과정이 재밌었다. 가끔은 문제를 푸는데만 집중을 하다 보니, 점점 코드 구조가 복잡해지고 했다. 이번 문제를 통해 코드 구조에 대해서도 조금 더 생각하고 고민하는 시간도 가졌다.

두 번째로 타입 힌트를 적극적으로 활용했다. 아직 부족한 부분도 많을 수 있지만, 조금 더 가시성 높은 코드를 만드는 방법 중 하나로 생각하여 종종 활용하고 있다.

'CS > 알고리즘 & 문제풀이' 카테고리의 다른 글

[Python] 백준 16562 친구비  (0) 2022.02.20
[Python] 백준 18809 Gaaaaaaaaaarden  (0) 2022.02.02
[Python] 백준 2671 잠수함식별  (0) 2021.12.17
[Python] 백준 5557 1학년  (0) 2021.12.13
[Python] 백준 1092 배  (0) 2021.12.13

댓글