본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Drawing Book

Drawing Book | HackerRank

 

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