https://www.acmicpc.net/problem/14652
문제 설명
N, M(행,열)이 주어지고 표에 적혀있는 좌석번호를 입력으로 좌표 (n,m)을 출력하는 문제입니다.
왼쪽 위부터 (0,0)으로 주어지고 만약에 좌석번호 5번의 경우에는 (1,1)로 찾을 수 있습니다.
소스코드 & 설명
이런 문제들은 기본적으로 좌석번호의 규칙을 찾아내야 합니다.
가급적이면 반복문으로 해결하는것보다 수학적 규칙으로 찾아내야 하고 반복문으로 해결한 경우 십중팔구 대부분이 시간 초과가 뜨게 됩니다.
좌석번호를 자세히 보시면
우선 0,1,2,3 까진 n좌표는 0이고 m좌표는 입력한 좌석번호 그대로 임을 알 수 있습니다.
즉 좌석번호가 M보다 작을땐 (0,좌석번호) 로 그대로 출력합니다.
그 다음의 규칙을 찾는게 좀 시간이 걸렸는데 4,8을 M으로 나눈몫을 보면 이것이 n의 좌표가 되게 됩니다.
그리고 또 다시 M으로 나눈 나머지를 보면 이것이 바로 m의 좌표가 됨을 알 수 있습니다.
(처음에는 m의 좌표를 찾기 위해 N으로 나눠보다가 좀 해맸습니다)
이것을 코드로 옮겨보면 다음과 같습니다.
n,m,k = map(int , input().split())
if k <= m-1: #번호가 M보다 작으면
print(F"0 {k}") #그 숫자가 곧 좌표
else: #아닐경우
n_location = k // m #값을 M으로 나눈것의 몫이 곧 n의 좌표.
m_location = k % m #요건 나머지
print(n_location, m_location)
그리고 생각해보니 굳이 M보다 작은걸 검사할 필요가 없었습니다.
0,1,2,3의 경우에도 M으로 나눈몫과 나머지가 곧 좌표가 됩니다.
ex) 2는 0,2인데 4로 나눈몫은 0이고 나머지는 2입니다.
n,m,k = map(int , input().split())
n_location = k // m #값을 M으로 나눈것의 몫이 곧 n의 좌표.
m_location = k % m #요건 나머지
print(n_location, m_location)
그래서 최종적인 코드는 다음과 같습니다.
'프로그래밍 > BaekJoon' 카테고리의 다른 글
[Baekjoon] 10989번: 수 정렬하기 3 (0) | 2021.06.09 |
---|---|
[Baekjoon 파이썬] 1929번: 소수 구하기 (0) | 2021.06.03 |
[Baekjoon C언어] 10250번: ACM 호텔 (5) | 2021.05.29 |
[Baekjoon C언어] 9488번 시험성적 / 항상 A를 출력하는 이유 (0) | 2020.01.05 |
[Baekjoon 파이썬] 1237번 정ㅋ벅ㅋ (0) | 2020.01.05 |