기본 틀 :
using System;
public class Solution {
public int solution(int storey) {
int answer = 0;
return answer;
}
}
문제를 보고 while문을 사용해 storey가 0이 아닐 경우 반복 작업 하도록 만들어줬다.
while(storey != 0)
{
}
그리고 반복문 안에 storey % 10으로 현재 남은 층수를 구해줬다.
int num = storey % 10;
storey /= 10;
해당 남은 층수가 5초과이면 5층 위로 올라가고, 5미만이면 5층 내려가는 식으로 코드를 작성해줬다.
// 5초과이면
if(num > 5)
{
// (10 - num)만큼 1 버튼 누르기
answer += (10 - num);
// 다음 층수 +10 해줘야 됨
storey += 10;
}
// 5미만이면 남은 num만큼 1 버튼 누리기
else if(num < 5) answer += num;
다음으로 5일 경우를 생각해봐야 하는데
5인 경우 앞 자리 숫자가 어떻게 되느냐에 따라 위로 올라가는 것이 이득이 될 수 있게 된다.
ex) 55
5 올라감 => 횟수 : 5 그에 따른 앞 자리 1증가 5 -> 6 6 올라감 => 횟수 : 9 |
5 내려감 => 횟수 : 5 5 내려감 => 횟수 : 10 |
앞 자리가 5이상일 경우 올라가게 되면 위와 같이 다음 횟수를 줄일 수 있는 것을 볼 수 있다.
그래서, 코드를 수정해보면
int answer = 0;
while(storey != 0)
{
// 현재 남은 층수
int num = storey % 10;
// 다음 남은 층수
int next = (storey / 10) % 10;
// 5초과이면
if(num > 5)
{
// (10 - num)만큼 1 버튼 누르기
answer += (10 - num);
// 다음 층수 +10 해줘야 됨
storey += 10;
}
// 5미만이면 남은 num만큼 1 버튼 누리기
else if(num < 5) answer += num;
// 5일 경우
else
{
// 다음 횟수가 5이상 이면
// 위로 올라가는 것이 이득
if(next >= 5)
{
// 5번 이동 및 10증가 반영
answer += num;
storey += 10;
}
// 아닐 경우 내려가는 것이 이득
else answer += num;
}
storey /= 10;
}
위와 같이 수정할 수 있다.
전체 코드 :
using System;
public class Solution {
public int solution(int storey) {
int answer = 0;
while(storey != 0)
{
// 현재 남은 층수
int num = storey % 10;
// 다음 남은 층수
int next = (storey / 10) % 10;
// 5초과이면
if(num > 5)
{
// (10 - num)만큼 1 버튼 누르기
answer += (10 - num);
// 다음 층수 +10 해줘야 됨
storey += 10;
}
// 5미만이면 남은 num만큼 1 버튼 누리기
else if(num < 5) answer += num;
// 5일 경우
else
{
// 다음 횟수가 5이상 이면
// 위로 올라가는 것이 이득
if(next >= 5)
{
// 5번 이동 및 10증가 반영
answer += num;
storey += 10;
}
// 아닐 경우 내려가는 것이 이득
else answer += num;
}
storey /= 10;
}
return answer;
}
}
'문제 풀기 > C#' 카테고리의 다른 글
116. 점 찍기 (0) | 2025.06.04 |
---|---|
115. 호텔 대실(Tuple ,TimeSpan) (5) | 2025.06.02 |
114. (중요)배달 (튜플(Tuple), Custom Class) (0) | 2025.05.30 |
113. 전력망을 둘로 나누기 (0) | 2025.05.26 |
112. 행렬 테두리 회전하기 (0) | 2025.05.12 |