반응형
[ 문제 ]
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<N) 플레이어는 게임을 하는 중에 바구니를 왼쪽이나 오른쪽으로 이동할 수 있다. 하지만, 바구니는 스크린의 경계를 넘어가면 안 된다. 가장 처음에 바구니는 왼쪽 M칸을 차지하고 있다.
스크린의 위에서 사과 여러 개가 떨어진다. 각 사과는 N칸중 한 칸의 상단에서 떨어지기 시작하며, 스크린의 바닥에 닿을때까지 직선으로 떨어진다. 한 사과가 바닥에 닿는 즉시, 다른 사과가 떨어지기 시작한다.
바구니가 사과가 떨어지는 칸을 차지하고 있다면, 바구니는 그 사과가 바닥에 닿을 때, 사과를 담을 수 있다. 상근이는 사과를 모두 담으려고 한다. 이때, 바구니의 이동 거리의 최솟값을 구하는 프로그램을 작성하시오.
[ 코드 ]
1. 내 코드
- 반복문을 이용한 것 외에는 밑 코드와 거의 유사하다. 시간은 같고 2번코드가 메모리를 조금 덜 사용한다.
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
string[] s = sr.ReadLine().Split();
int n = int.Parse(s[0]);
int m = int.Parse(s[1]);
int j = int.Parse(sr.ReadLine());
int start = 1;
int end = m;
int count = 0;
for(int i = 0; i < j; i++)
{
int num = int.Parse(sr.ReadLine());
if(num != start && num != end && num > end)
{
while (true)
{
if (num == start || num == end) break;
start++;
end++;
count++;
}
}
else if (num != start && num != end && num < start)
{
while (true)
{
if (num == start || num == end) break;
start--;
end--;
count++;
}
}
}
sw.Write(count);
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 참고 코드
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
string[] s = sr.ReadLine().Split();
int n = int.Parse(s[0]);
int m = int.Parse(s[1]);
int j = int.Parse(sr.ReadLine());
int start = 1;
int end = m;
int count = 0;
for(int i = 0; i < j; i++)
{
int num = int.Parse(sr.ReadLine());
if(num > end)
{
int move = num - end;
start += move;
end += move;
count += move;
}
else if(num < start)
{
int move = start - num;
start -= move;
end -= move;
count += move;
}
}
sw.Write(count);
sw.Flush();
sw.Close();
sr.Close();
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/2828
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 1417번 국회의원 선거 (0) | 2024.03.18 |
---|---|
[C#] 16435번 스네이크버드 (0) | 2024.03.18 |
[C#] 백준 1343번 폴리오미노 (0) | 2024.03.16 |
[C#] 백준 14916번 거스름돈 (0) | 2024.03.16 |
[C#] 백준 1439 뒤집기 (0) | 2024.03.16 |