[JAVA] CodeUp-1072 goto

정상희·2022년 10월 15일
0

PS

목록 보기
5/8

문제

  • java에는 프로그램의 흐름을 바꾸는 goto의 개념이 없기 때문에 어떻게 풀이해야할 지 고민이 들었습니다.

    goto : 어느 특정 줄 번호나 레이블로 건너뛰거나 돌아갈 때 쓰는 명령

  • 코드업 게시판에서 발견한 힌트를 적용하니 통과할 수 있었습니다.



힌트

import java.util.*;	// StringTokenizer
import java.io.*;	// BufferedReader, Writer, InputStreamReader, OutputStreamWriter
 
public class Main {
	public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 자바의 출력속도를 빠르게 하기 위해 버퍼를 사용하는 출력함수를 사용합니다.
	public static StringTokenizer st;	// 문자열을 토큰들로 쪼개는 역할을 합니다.
	
	public void answer(int cnt) throws Exception{	// 본문에서 말씀드린 반복을 담당하는 재귀함수입니다. 메인 메소드에서 st의 Token 개수를 매개변수로 받으면 됩니다.
		
		bw.write(st.nextToken());
		bw.newLine();
		
		if(cnt>1)
			answer(cnt-1);
		
	}
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 자바의 입력속도를 빠르게 하기 위해 버퍼를 사용하는 입력함수를 사용합니다.

		/*
		 * (참고) StringTokenizer를 통해 Token의 개수를 셀 수 있기 때문에
		 * 첫 번째 줄에서 받는 n을 따로 저장할 필요가 없습니다.
		 * 
		 * 문자열을 BufferedReader br를 통해서 입력받기.
		 * 
		 * 입력받은 문자열을 StringTokenizer st에 넣기. 구분자는 뭐로 정해야 할까요?
		 * 
		 * answer 메소드에 st의 토큰 개수를 매개변수로 호출하기.
		 * 
		 * bw.flush(); 로 출력버퍼에 있는 내용들을 한 번에 출력합니다.
		 */
	}
}


풀이

사용된 문법 개념

재귀함수

반복문을 사용할 수 없으므로 재귀함수로 대체됐습니다.

재귀 : 원래의 자리로 되돌아가거나 되돌아온다는 뜻
재귀함수 : 자기 자신을 부르는 함수

문자기반의 보조스트림

BufferedReader과 BufferedWriter은 버퍼를 이용해 입출력의 효율을 높여주는 역할

BufferedReader의 readLine() : 데이터를 라인단위로 읽습니다.
BufferedWriter의 newLine() : 줄바꿈

  • 입력 타입

    Byte Type = InputStream
    Char Type = InputStreamReader
    Char Type의 직렬화 / String Type = BufferedReader

  • 출력 타입

    시스템 출력기능 = PrintStream
    Byte Type으로, PrintStream클래스의 부모 클래스 = OutputStream
    OutputStream 기능을 보완한 클래스, 문자열 출력 가능 = OutputStreamWriter

cf) InputStreamReader과 OutputStreamWriter은 바이트 기반 스트림을 문자 기반 스트림으로 연결시켜줍니다.


소스 코드

import java.io.*;   // BufferedReader, BufferedWriter, InputStreamReader, OutputStreamWriter
import java.util.StringTokenizer;

public class CodeUp1072 {
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    public static StringTokenizer st;   

    public static void answer(int cnt) throws IOException {
        bw.write(st.nextToken());   // 다음 토큰 읽기
        bw.newLine();               // 줄바꿈
        if(cnt > 1){
            answer(cnt-1);  // cnt>1 이상이라면 answer(cnt-1) 호출
        }
    }

    public static void main(String[] args)  {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine(), " "); // 띄어쓰기로 토큰 구분
            answer(n);
            br.close();
            bw.flush();		// 출력버퍼에 있는 내용들을 한 번에 출력
            bw.close();

        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
profile
기록중

0개의 댓글

관련 채용 정보