본문 바로가기

예전글/BOJ 단계별로 풀어보기

[백준][3단계][2742번] 기찍 N (Java)




 * 오류 지적, 오타, 내용 개선 댓글은 대환영입니다!


 오랜만에 뵙습니다. 글을 안 올린 지 꽤 되었네요. 요즘 너무 피곤해서 한동안 푹 쉬고 돌아왔습니다. 이제 다시 포스팅을 할 때입니다. 3단계 첫 번째 문제를 마지막으로 풀어봤던 것 같군요. 이번 문제는 for문을 이용하는 기초를 다져보는 문제입니다. 


문제


  자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

 첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

 첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

예제 입력

5
 * 예제는 하나만 적겠습니다.

예제 출력

5
4
3
2
1


답안


import java.util.Scanner; class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); for(int i = 0 ; i < N ; i++) System.out.println(N - i); } }


풀이

 저번 문제와 크게 다를 바는 없습니다. 하지만 차이점이 딱 하나 있습니다. 제목에서 보시는 것처럼, 거꾸로 출력해야 한다는 것이죠. 그렇다고 그리 어려운 것은 아닙니다. 기존에 사용하던 방법에 한 가지 아이디어만 더하면 되니까요. 다음은 저번 문제 - 순서대로 출력하는 코드 - 에 사용했던 for문과 그 내용입니다.
for(int i = 1 ; i < N ; i++)
    System.out.println(i);

 해당 코드에서는 i를 출력하는데, i가 1에서부터 N-1로 변하니까 결국 차례차례 출력하겠다는 말이 됩니다. i가 1일 때는 1, 2일 때는 2, 뭐 이렇게 말입니다. 그런데 거꾸로 출력하려면, 어딘가를 수정해야 합니다.

 두 가지 방법이 있습니다. for문의 [조건]과 [이벤트]를 적절히 수정하여 출력될 i값을 직접 수정하거나, i는 그대로 둔 채 출력하는 값을 다른 값으로 하는 방법입니다. 
 for문을 수정하면, [조건]은 i>0, [이벤트]는 i--로 수정할 수 있습니다. 
 출력하는 값만 바꾸기 위해서는 System.out.println(i);의 i를 바꿔야 하는데, N-1로 바꾸는 것으로 해결할 수 있습니다. i가 0이면 출력하는 값은 N, i가 1이면 출력하는 값은 N-1... 과 같은 식이죠. 위 답안에 쓰인 방법이기도 합니다.

 두 방법 중에 절대적인 정답은 없습니다. 용도에 따라 두 방법을 적절히 사용하시면 되겠습니다.


 다음 문제는 구구단입니다.

 다들 화이팅합시다!