BOJ 1641

2020-07-28

위 문제는 백준 사이트의 알고리즘 1641 문제에 관한 설명입니다.


문제

영식이는 숫자를 셀 때, 왼손을 이용한다. 엄지손가락부터 시작해서 새끼손가락까지 차례대로 하나씩 센다.

그다음에 새끼손가락까지 센 다음에는 반대로 엄지손가락으로 다시 역방향으로 센다. 영식이는 자기가 원하는 숫자가 나올 때 까지 계속해서 이 방법으로 센다.

영식이는 절대 손가락을 건너뛰지 않는다. 예를 들어 숫자 10을 셀 때는, 엄지->검지->중지->약지->새끼->약지->중지->검지->엄지->검지 이렇게 센다.

슬프게도, 영식이는 민식이와 싸우다가 손가락을 하나 다쳤다.

멍청한 영식이는 오른손으로는 셀 수 없기 때문에, 오늘도 역시 왼손으로 세야 한다.

영식이는 다친 손가락을 쓸 수 없는 것은 아니고, 셀 수 있는 횟수가 제한되어 있는 것이다.

영식이가 셀 수 있는 최대 숫자를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 영식이가 다친 손가락이 주어진다.

엄지부터 차례대로 1,2,3,4,5로 번호가 매겨져 있다.

둘째 줄에는 영식이가 다친 손가락으로 몇 번 셀수 있는지 주어진다.

이 수는 1,000,000,000보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 영식이가 셀 수 있는 수의 최댓값을 출력한다.

만약 시작도 할 수 없으면 0을 출력한다.


import java.util.*;
import java.io.*;

public class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long N = Integer.parseInt(br.readLine());
        long cnt = Integer.parseInt(br.readLine());
        long n = N - 1;
        if (cnt > 0) {
            if (N % 4 == 1) n += 8 * cnt;
            else n += cnt / 2 * 8 + cnt % 2 * (8 - (N - 1) * 2);
        }
        System.out.println(String.valueOf(n));
        
    }
}

String.valueOf()

  • 매개변수로 기본형 변수와 객체를 지정할 수 있으며 그결과로 String을 얻습니다.
  • 파라미터가 null이면 문자열 null을 만들어서 담습니다.

toString()

  • 파라미터의 값이 null 이면 NullPointerException을 발생시킵니다.
  • Object에 담긴 값이 String이 아니라도 출력합니다.

즉, 차이점은 null값에 따른 NullPointerException의 발생 유무입니다.

자바 API 링크

영식이의 손가락