[TIL #5] 알고리즘 초콜릿 자르기

안떽왕·2023년 3월 23일
0

Today I Learned

목록 보기
5/76

오늘은 알고리즘 백준이라는 알고리즘 사이트에서 기초 알고리즘 문제를 풀어봤는데 그 중 인상깊었다고 생각되는 몇 문제들을 적어봤습니다.

해설을 보고 수정한 버전이 아니고 저 혼자 풀어보며 정답을 낸것이라 다른 최적화된 답안들 보다 질이 떨어지니 혹여나 이 글을 참고하시려거든 제가 문제번호를 함께 적어놓을테니 다른 곳의 결과물도 함께 봐주시길 바라겠습니다.

2163번 초콜릿 자르기

https://www.acmicpc.net/problem/2163

문제

N x M 크기를 가진 초콜릿을 나누어 떨어지지 않을 때까지 자른다면, 그 횟수는 몇회인가?

입력: 첫째 줄에 두 정수 N, M(1 ≤ N, M ≤ 300)이 주어진다.
출력: 첫째 줄에 답을 출력한다.

예제입력: 2 2
예제출력: 3

이해

사실 문제를 처음 접했을 때 어떻게 하면 되겠다는 설계는 바로 잡혔는데 문제는 어떻게 계산해야 나누어 떨어지지 않는 횟수를 찾을 수 있는지 몰랐습니다.

깊이 생각을 해보기도 전에 노트와 펜을 집어들어 도형을 그려 나갔고, 3개 정도 그림을 그려보니 N x M -1을 하면 원하는 결과물을 얻을 수 있다는 생각에 도달했습니다.

결과

N, M = input().split()

int_N = int(N)
int_M = int(M)

print(int_N * int_M - 1)

예제입력을 보면 2 2 즉 한 번의 입력에 두 개의 값을 받아오고 그 값을 각각 변수에 저장해야 하는 것을 알 수 있습니다.

정수 NM을 입력받기 위해 input함수를 사용하고 공백을 기준으로 각각 값을 부여해주기 위해 split함수를 사용했습니다.

input으로 받아온 값은 strig형식을 가지고 있어서 형 변환을 시켜주고 아까 도형을 그리며 알아낸 수식에 값을 넣어 마무리 했습니다.

느낀 점

이번 문제가 특별히 어려웠던 문제는 아니지만, 도형을 그려가며 수식을 찾고 있던 제 모습에 웃음이 자꾸 나와서 적게 되었습니다.

맨 처음 실행시켰을때는 input으로 받는 값이 자료형인걸 까먹고 형변환도 안하고 돌렸네요... 담에는 이런 실수가 없도록 해야겠습니다.

적으며 생각해보니 map함수를 사용했으면 더 깔끔하게 해결할 수 있었던것 같습니다.

N, M = map(int, input().split())

print(N * M - 1)
profile
이제 막 개발 배우는 코린이

0개의 댓글