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();
}
}
}