오늘은 알고리즘 백준
이라는 알고리즘 사이트에서 기초 알고리즘 문제를 풀어봤는데 그 중 인상깊었다고 생각되는 몇 문제들을 적어봤습니다.
해설을 보고 수정한 버전이 아니고 저 혼자 풀어보며 정답을 낸것이라 다른 최적화된 답안들 보다 질이 떨어지니 혹여나 이 글을 참고하시려거든 제가 문제번호를 함께 적어놓을테니 다른 곳의 결과물도 함께 봐주시길 바라겠습니다.
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
즉 한 번의 입력에 두 개의 값을 받아오고 그 값을 각각 변수에 저장해야 하는 것을 알 수 있습니다.
정수 N
과M
을 입력받기 위해 input
함수를 사용하고 공백을 기준으로 각각 값을 부여해주기 위해 split
함수를 사용했습니다.
input
으로 받아온 값은 strig
형식을 가지고 있어서 형 변환을 시켜주고 아까 도형을 그리며 알아낸 수식에 값을 넣어 마무리 했습니다.
이번 문제가 특별히 어려웠던 문제는 아니지만, 도형을 그려가며 수식을 찾고 있던 제 모습에 웃음이 자꾸 나와서 적게 되었습니다.
맨 처음 실행시켰을때는 input
으로 받는 값이 자료형인걸 까먹고 형변환도 안하고 돌렸네요... 담에는 이런 실수가 없도록 해야겠습니다.
적으며 생각해보니 map
함수를 사용했으면 더 깔끔하게 해결할 수 있었던것 같습니다.
N, M = map(int, input().split())
print(N * M - 1)