PS를 여태까지 제대로 안 풀었다 보니
상태가 생각보다 최악이라는 것을 깨닫게 되었다.
공부하면 교정할 수 있으니 꾸준히 해 보자
int place(int n)
{
int count =0;
while(true)
{
if(n/10 ==0) break;
n = n/10;
count++;
}
return count;
}
int main() {
int T;
int h,w, n;
int floor;
int equalfloornumber;
int digitnumber;
cin>>T;
int *number;
number = new int[T];
for(int i=0; i<T; i++){
// 높이가 1층일때
cin>> h >> w >> n;
if(h==1)
{
floor = 1;
equalfloornumber = n;
digitnumber = place(w);
floor = floor*100;
}
else
{
if (n%h ==0) floor = (n-1)%h + 1;
else floor = n%h;
equalfloornumber = n/h + 1;
if(n%h==0) equalfloornumber = n/h;
floor = floor*100;
}
number[i] = floor+equalfloornumber;
}
for(int i =0; i<T; i++)
{
cout<<number[i]<<"\n";
}
delete []number;
}
처음 작성해 본 소스코드
고민하는데 1시간~1시간 30분 가량 걸렸는데
순번과 h, w의 관계에 대해서는 생각보다 빠르게 간파는 하였다.
문제는 문제를 제대로 읽지 못한 잘못과 일반화 처리를 하지 못하고 조건문으로 땜질하려는 경향에 큰 오류가 있었다.
1. 문제에서 h,w는 1과 99사이라는 조건이 있고 n은 hxw 이하라는 조건이 있다.
나는 해당 조건을 무시하고 만약 w가 둘째 자리를 넘어가면 어떻게하지?
n이 방 번호보다 더 넘으면 어떻게 하지?
라는 사고가 들어서 이에 대한 예외 처리를 어떻게 할지를 생각하였다.
그렇기 때문에 문제에 조건이 제시되어 있는건데, 이걸 읽지 않고 전제부터 무시하니까 이런 데에서 생각에 대한 체력을 크게 낭비하였던 것 같다.(위에 만든 inplace 함수가 w에 따라서 10을 몇번 곱해 줄지 고민한 결과이다.)
2. 두번째로 n%h n/h에 대해서 연관성이 있다는 사실을 발견했지만
나누어 떨어지거나 0이 될때를 고려하고 이에 대한 분기를 시도하려 한 것이다.
규칙은 생각보다 통용될 수 있다는 생각을 버리고 예외 상황에 대해서 그때그때 마다 분기하면서 어떻게는 짜집기 하려고 한
습관이 이러한 재앙을 만들었다.
n 순번은 1부터 시작이지만 나눗셈 처리는 0을 기준으로 처리된다.
n 순번을 한칸 뒤로 밀어서 n-1로하고 계산한 다음 다시 원래 순번인 +1로 하면 맞아 떨어진다.
-> 특정 조건에 대해서 예외 처리가 생길때는 생각보다 문제 해결 상황이 그 근처에 있다.
3. 변수명 네이밍
변수명을 너무 개떡같이 정하는 경향이 있다.
간결성화 통일성을 위해서 네이밍 규칙을 정해서 풀어야 할 필요가 있다
#include <iostream>
using namespace std;
int main()
{
int h, w, n;
int T;
int *roomnumber;
cin>>T;
roomnumber = new int[T];
int floor;
int room;
int index;
for(int i=0; i<T; i++)
{
cin>> h >> w>> n;
floor = (n-1)%h + 1;
room = (n-1)/h + 1;
roomnumber[i] = floor*100 + room;
}
for(int i=0; i<T; i++)
{
cout<<roomnumber[i]<<"\n";
}
delete []roomnumber;
}
사실 문제 상황이 근처에 있다는 걸 정답을 알면 알지만
모를때는 내가 맞게 풀고 있는건가부터 의심하기 시작해서 다른 곳에서부터 해답을 찾으려고 하는것 같다.
좀더 연습해보고 생각을 정리하는 힘을 길러 봐야겠다.
'Problem Solving' 카테고리의 다른 글
| BOJ 1012 — 유기농 배추 (0) | 2026.02.09 |
|---|---|
| BOJ1003 - 피보나치 함수 (0) | 2026.02.04 |
| BOJ 1018 – 체스판 다시 칠하기 (0) | 2026.02.03 |
| BOJ 1181,10814 - sort, stable_sort (1) | 2026.01.22 |
| BOJ 1008 부동소수점 정밀도 (0) | 2026.01.14 |