Drawing Book | HackerRank
How many pages does a student need to turn to get to page p?
www.hackerrank.com
<문제>

Drawing Book문제는 내가 펴고 싶은 책의 페이지까지 앞이나 뒤에서부터 최소한 몇 장을 넘겨야하는지 알려주는 문제이다.
input: 첫번째 줄에는 책의 총 페이지 수를 입력받고, 두번째 줄에는 내가 펴고 싶은 페이지 번호를 입력한다.
outpur: 펴고 싶은 페이지까지 넘겨야할 페이지 수의 최소값을 리턴한다.
<코드>
int pageCount(int n, int p) {
if(n%2==0){
if(n-p<p)
return (n-p+1)/2;
else
return p/2;
}
else{
if(n-p < p)
return (n-p)/2;
else
return p/2;
}
}
<풀이>
매개변수로 페이지 수 n과 펼치고 싶은 페이지 p를 받았다. 먼저 if 조건식으로 n을 2로 나눴을 때 0으로 나누어떨어지면 마지막에 한 페이지만 있다. n이 2로 나누어 떨어질 때, n-p가 p보다 작으면 뒤에서부터 수를 세야한다. 조건식이 참인 경우 마지막 한 페이지를 장으로 인식해야하므로 n-p+1을 2로 나눈 값을 리턴하면 된다.
만약 n을 2로 나눴을 때 나머지가 1이면 마지막 페이지에 두 페이지가 있다. 그러므로 n-p가 p보다 작으면 뒤에서부터 수를 세야하는데, 그냥 n-p를 2로 나누어서 리턴하면 된다. n-p가 p보다 크거나 같으면 앞에서부터 페이지 수를 세야하므로 그냥 p를 2로 나누어 리턴하면 된다.
<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글
| [HackerRank] Equalize the Array (0) | 2021.08.05 |
|---|---|
| [HackerRank] Left Rotation (0) | 2021.08.05 |
| [HackerRank] Utopian Tree (0) | 2021.07.27 |
| [HackerRank] Print in Reverse (0) | 2021.07.27 |
| [HackerRank] Sales by Match (0) | 2021.07.22 |