문제 1014 : [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기(설명) 2개의 문자(ASCII CODE)를 입력받아서 순서를 바꿔 출력해보자.
참고 char x, y; scanf(“%c %c”, &x, &y); printf(“%c %c”, y, x); //출력되는 순서를 작성와 같은 방법으로 해결할 수 있다.
풀이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 { 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 { 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 { 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가 좋다.
원리
경계
Scanner
사용자 요청시 데이터 매번 읽어옴
space, enter 모두 경계로 인식
BufferedReader
일정량을 한 번에 읽어온 후 버퍼에 보관 -> 사용자 요청시 버퍼에서 읽어옴
enter만 경계로 인식
BufferedReader 특징
입력값 String으로 고정이기에 타입변환 필요함
자체적으로 Exception처리된 Scanner와 달리 따로 IOException 처리해야함
버퍼에 저장되는 데이터에 공란을 기준으로 여러 값이 있는 경우 파싱 필수 -> StringTokenizer 사용
참고
다른 문제 풀이가 보고싶다면?