본문 바로가기

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

[백준][3단계][2741번] N 찍기 (Java) : for문


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


 3단계 문제입니다. 3단계에서는 for문을 주로 이용하게 되는데, for문은 앞으로도 계속 이용하게 될 반복문이기 때문에 이 기회에 확실히 이해해 두시는 게 좋습니다. 3단계는 for문을 이용한 기본적인 테크닉을 익히게 됩니다. 물론 테크닉이래봤자 막 머리가 아플 정도로 어려운 그런 건 아니니까 걱정 안 하셔도 될 듯합니다.


 for문은 대략 다음과 같은 형태입니다. 그 아래는 용례입니다.

for( 선언 ; 조건 ; 이벤트 ) { 명령어 }

for( int i = 0 ; i < 10 ; i++ ) { System.out.println(i); }


 [선언]에서는 for문에서 사용할 정수형 변수 하나를 선언합니다. 대체로 i, j, k, ... 순으로 사용하는 편입니다. 지역 변수이기 때문에 for문을 따로 두 번 사용하시면 둘 다 i라고 선언하셔도 무방합니다. C언어와 Java를 사용하다 보면 이 부분에서 차이점을 느끼실 텐데, Java는 여기에서 변수를 새로 선언할 수 있지만 C에서는 밖에서 변수를 선언을 해 두어야 합니다.


 [조건]에서는 for문이 명령어를 실행하기 위한 조건을 설정합니다. boolean형의 자료나 조건문이 들어갑니다. 주로 [선언]의 변수를 이용한 조건을 쓰게 됩니다. while문의 괄호와 같습니다.


 [이벤트]에서는 for문이 명령어를 마친 뒤 실행할 명령을 설정합니다. 위의 예시에서는 i++, 즉 i의 값을 1 증가시킨다는 명령을 수행합니다.


 위의 예시를 실행시킨다면 0부터 9까지의 숫자가 각 줄마다 출력될 겁니다. 그런데, 또 for문에서 중요한 것이 'for문의 반복이 끝나면 i값이 어떻게 되느냐'인데요, 이게 왜 중요하냐면 정보올림피아드(現 한국코드페어)에서 초반 문제로 상당히 좋아하는 문제 유형 중 하나였기 때문입니다. 위 예시에서 i는 9까지 출력됩니다. 그리고 [이벤트]의 구문이 실행되죠. 즉 마지막 루프에서도 똑같이 [이벤트]의 구문을 실행하기 때문에 i는 10이 됩니다. 그리고 다시 [조건]을 검사하고 조건에 맞지 않으니 반복문을 끝내게 되는 거죠. 순서를 유념하시기 바랍니다. 참고로, if문처럼 안의 명령어가 하나뿐일 때는 for문의 괄호를 생략할 수 있습니다.


 만약 for문이 어떻게 작동하는지 이해가 가지 않으신다면, for문의 움직임을 하나하나 직접 해 보는 것도 나쁘지 않습니다. i가 1일 때, i가 2일 때... 재미는 없지만, for문이 어떻게 작동하는 지 이해하기에는 좋습니다.


문제


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

입력

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

출력

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

예제 입력

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

예제 출력

1
2
3
4
5

답안


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 = 1 ; i <= N ; i++) System.out.println(i); } }


풀이

 for문을 이용하는 기초적인 아이디어입니다.
 for문은 기본적으로 변수를 하나 선언한 뒤 이를 반복의 매개로 이용합니다. 그리고 for문 안에서 이 변수를 이용할 수도 있죠. 가령 1번째, 2번째, 3번째, ..., n번째로 진행시키고 싶을 경우 i를 1부터 n까지 올라가게 설정하여 i번째를 출력하게 하면 된다는 뜻입니다.

 2741번도 그렇습니다. 위 답안에서 핵심은 여기입니다.
        for(int i = 1 ; i <= N ; i++)
            System.out.println(i);
 i를 출력합니다. i는 1부터 시작해서, N보다 작거나 같을 동안은 계속 i에 1씩 더해 가며 반복하기 때문에, 1,2,3,... 과 같이 출력될 수 있습니다. N보다 클 경우는 출력되지 않으므로 N까지 출력되겠군요.
 즉, Scanner로 N을 입력받은 뒤, 위와 같이 for문을 이용하면 됩니다.


 기본적인 for문 문제였습니다. 앞으로 나올 문제들도 이 틀에서 크게 벗어나지 않지만, for문 안에서 i를 이용하는 방식이 다소 차이가 있을 것입니다. 그럼 다음 문제에서 뵙겠습니다. 좋은 하루 되시기 바랍니다!