[자바JAVA]1014 : [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기(설명), Scanner vs BufferedReader 차이

문제 1014 : [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기(설명)

2개의 문자(ASCII CODE)를 입력받아서 순서를 바꿔 출력해보자.

참고
char x, y;
scanf(“%c %c”, &x, &y);
printf(“%c %c”, y, x); //출력되는 순서를 작성와 같은 방법으로 해결할 수 있다.

  • 입력예시
1
A b
  • 출력예시
1
b A




풀이1 : Scanner + char 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
public class quizCodeup1014 {
public static void main(String[] args) throws IOException {

// 풀이1 : char로 받아서 출력
// 메모리 12480 시간 93
Scanner sc = new Scanner(System.in);
char x = sc.next().charAt(0);
char y = sc.next().charAt(0);

sc.close();
System.out.printf("%c %c", y, x);
}
}




풀이2 : Scanner + String 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
public class quizCodeup1014 {
public static void main(String[] args) throws IOException {

// 풀이2 : String으로 받아서 출력
// 메모리 12376 시간 96

Scanner sc = new Scanner(System.in);
String x = sc.next();
String y = sc.next();
sc.close();
System.out.println(y+" "+x);
}
}




풀이3 : BufferedReader + StringTokenizer 사용

1
2
3
4
5
6
7
8
9
10
11
public class quizCodeup1014 {
public static void main(String[] args) throws IOException {

// 풀이3 : BufferedReader사용
// 메모리 :11140 시간:66
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String[] anz = {st.nextToken(), st.nextToken()};
System.out.println(anz[1]+" "+anz[0]);
}
}




코드 비교

Scanner + char 사용 Scanner + String 사용 BufferedReader + StringTokenizer 사용
수행시간 93 ms 96 ms 66 ms
메모리 12480 kb 12376 kb 11140 kb




배운 지식

알고리즘 최적화를 위해 Scanner보단 BufferedReader가 좋다.

https://studywithus.tistory.com/61

원리 경계
Scanner 사용자 요청시 데이터 매번 읽어옴 space, enter 모두 경계로 인식
BufferedReader 일정량을 한 번에 읽어온 후 버퍼에 보관 -> 사용자 요청시 버퍼에서 읽어옴 enter만 경계로 인식
  • BufferedReader 특징
    1. 입력값 String으로 고정이기에 타입변환 필요함
    2. 자체적으로 Exception처리된 Scanner와 달리 따로 IOException 처리해야함
    3. 버퍼에 저장되는 데이터에 공란을 기준으로 여러 값이 있는 경우 파싱 필수 -> StringTokenizer 사용




참고




다른 문제 풀이가 보고싶다면?