이 영역을 누르면 첫 페이지로 이동
Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

페이지 맨 위로 올라가기

Stranger's LAB

프로그래밍과 관련하여 다양한 알고리즘 문제를 풀어보고, 프로그래밍 언어를 이해해 볼 수 있도록 돕고자 만든 블로그 입니다.

[백준] 10718번 : We love kriii - JAVA [자바]

  • 2020.02.01 00:07
  • JAVA - 백준 [BAEK JOON]/기타 문제
글 작성자: ST_
728x90

 

 

https://www.acmicpc.net/problem/10718

 

10718번: We love kriii

ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올 해에도 파주 World Finals 준비 캠프에 참여했다. 대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자.

www.acmicpc.net

 

 




  • 문제

 




  • 4가지 풀이 방법을 이용한다.



크게 System 클래스, BufferedReader, StringBuilder, StringBuffer 를 이용하여 풀이 할 것이다.

 

기본 사용 방법은 전 포스트에서도 잠깐 언급했으니 참고해보아도 좋을 듯 하다.

 



2020/01/29 - [JAVA/백준[BEAKJOON]] - [백준] 2557번 : Hello World

 

[백준] 2557번 : Hello World

https://www.acmicpc.net/problem/2557 2557번: Hello World Hello World!를 출력하시오. www.acmicpc.net 문제 첫 글로 백준 알고리즘 사이트의 문제를 포스팅했다. 앞으로도 쭉 이 사이트의 단계별 문제들을 풀..

st-lab.tistory.com







  • 풀이

 

- 방법 1  ( System 클래스 - 표준 입출력 )



public class Main {
	public static void main(String[] args) {
		System.out.println("강한친구 대한육군");
		System.out.println("강한친구 대한육군");     
        
        
// 그 외의 방법들
//		System.out.printf("%s","강한친구 대한육군\n강한친구 대한육군");
//		System.out.printf("%s\n%s","강한친구 대한육군","강한친구 대한육군");
//		System.out.printf("강한친구 대한육군\n강한친구 대한육군");

	}
}

 

나 또한 단순 출력으로 할 때는 println(); 을 쓴다.

그 외에는 특정 순서에 따라 개행( '\n') 하거나 문자열과 숫자 등 서로 다른 타입을 다룰 때는 printf(); 또는 print(); 를 쓴다.

 

 

 


- 방법 2 

 

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		bw.write("강한친구 대한육군");
		bw.newLine();	// 줄 구분자
		bw.write("강한친구 대한육군");
        
		bw.flush();
		bw.close();
	}
}

 

 

BufferedWriter 을 쓰는 방식이다. 

 

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 을 간략하게 뜯어보려면 아래를 클릭하길..


더보기

먼저 Buffer 는 데이터를 다른 곳으로 이동시키기 전에 일시적으로 데이터를 보관하는 임시 메모리 영역이라고 생각하면 된다.

우리가 이사할 때 이삿짐센터 차에 물건들을 임시로 모아서 보관하는 거로 생각하면 이해가 편할 것 같다.

즉, BufferedWriter 는 시스템의 버퍼를 이용하여 출력하는 문자 스트림 (캐릭터 단위 스트림) 이라는 것.

 

 

그럼 OutputStreamWriter() 은 무엇이냐..

일단 Stream 의 의미를 알아야 하는데, 간략하게 말하자면 한 지점에서 데이터를 단일 방향으로 목표지점에 도착하는 중간매개체 또는 흐름(통로)이라고 보면 된다.

 

이때 운영체제에 따라 기본 인코딩 방식이 다른데 이를 알아서 변경해준다.

나는 MACbook을 쓰고있는지라 유닉스 기반이다. 기본이 UTF-8 형식으로 인코딩하게 되는데 Windows는 따로 설정하지 않는 한 MS949 라는 형식으로 인코딩 하기 때문에 윈도우에서 한글로 작성한 메모장 파일을 맥에서는 깨져서 보이게 된다. 뭐.. 이러한 이유들로 stream을 사용한다.

 

(윈도우더라도 따로 설정해서 UTF-8을 쓰는걸 되도록 추천한다.)

 

 

이 말도 어렵다면 위에 자동으로 OS에 맞게 인코딩 방식을 변경해준다는 점은 나중으로 미루고

가장 기본 기능만 말하자면 우리가 음료수에 빨대를 꼽고 음료수를 마실 때, 이 음료수가 빨대라는 중간 매개체를 통해 음료가 쌓이고 목적지로 보내는 역할을 하는 스트림이라고 이해하면 쉽다.

위에 BufferedWriter 은 문자 스트림이라고 했는데 OutputStreamWriter() 은 문자 스트림을 바이트 스트림으로 변환해주는 스트림이다.

 

 

bw.newLine(); 이 추가되었는데 이 메소드는 개행을 해주는 메소드다.

 

참고로 newLine(); 은 '\n' 과 같은 '역할'은 하지만 '\n' 과 같은 것은 아니다.  

 

자바 API 를 보면 이렇게 설명되어있다.

 

( 추가로 println(); 메소드도 마찬가지로 '\n' 과 엄연하게 말하면 같은 것은 아니다. )

 

 

이후 bw.flush() 로 스트림에 들어있는 데이터를 비운다.

그리고 꼭 bw.close() 로 스트림을 종료해준다.

 

 

이 부분은 추후 따로 자세하게 포스팅 하겠다.

 

 



- 방법 3

public class Main {
	public static void main(String[] args){

		StringBuilder sb = new StringBuilder();
		sb.append("강한친구 대한육군\n");
		sb.append("강한친구 대한육군");
		
		System.out.println(sb);
	}
}



StringBuilder 를 이용하는 방법이다. 

 

바로 이전 포스팅에서도 설명했지만 문자열을 이어 붙이는 것이기 때문에 사실상 저 sb에 연결되어 있는 문자열은

"강한친구 대한육군\n강한친구 대한육군" 이다.

 







- 방법 4

public class Main {
	public static void main(String[] args){

		StringBuffer sb = new StringBuffer();
		sb.append("강한친구 대한육군\n");
		sb.append("강한친구 대한육군");
		
		System.out.println(sb);
	}
}

 

이것도 StringBuilder랑 똑같다.

 

 

 

 




  • 정리


오늘 어쩌다보니 Buffer 입출력에 대해 글이 길어졌다. 일단 백준에서 가장 일반적으로 쓰이는 것은 StringBuilder 하고 BufferedReader/BufferedWriter 이기 때문에 꼭 알아두면 좋겠다는 의미에서 계속 쓰고 있다.

 

시간이 되는대로 빨리 저 걸 정리해서 글을 올려야 할 것 같다.

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'JAVA - 백준 [BAEK JOON] > 기타 문제' 카테고리의 다른 글

[백준] 5543번 : 상근날드 - JAVA [자바]  (0) 2020.03.04
[백준] 2577번 : 숫자의 개수 - JAVA [자바]  (36) 2020.02.28
[백준] 2742번 : 기찍 N - JAVA [자바]  (6) 2020.02.18
[백준] 2741번 : N 찍기 - JAVA [자바]  (11) 2020.02.18
[백준] 10817번 : 세 수 - JAVA [자바]  (2) 2020.02.14

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 2577번 : 숫자의 개수 - JAVA [자바]

    [백준] 2577번 : 숫자의 개수 - JAVA [자바]

    2020.02.28
  • [백준] 2742번 : 기찍 N - JAVA [자바]

    [백준] 2742번 : 기찍 N - JAVA [자바]

    2020.02.18
  • [백준] 2741번 : N 찍기 - JAVA [자바]

    [백준] 2741번 : N 찍기 - JAVA [자바]

    2020.02.18
  • [백준] 10817번 : 세 수 - JAVA [자바]

    [백준] 10817번 : 세 수 - JAVA [자바]

    2020.02.14
다른 글 더 둘러보기

정보

Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

  • Stranger's LAB의 첫 페이지로 이동

검색

나의 외부 링크

  • st-github

공지사항

  • 공지 - 블로그 사용 설명서

메뉴

  • 홈
  • 방명록

카테고리

  • 전체 카테고리 (267)
    • Java (5)
    • JAVA - 백준 [BAEK JOON] (177)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (10)
      • 기본 수학 1 (8)
      • 기본 수학 2 (6)
      • 2차원 배열 (0)
      • 정렬 (10)
      • 재귀 (4)
      • 브루트 포스 (5)
      • 집합과 맵 (0)
      • 기하 1 (5)
      • 정수론 및 조합론 (12)
      • 백트래킹 (8)
      • 동적 계획법 1 (15)
      • 누적 합 (0)
      • 그리디 알고리즘 (5)
      • 스택 (5)
      • 큐, 덱 (7)
      • 분할 정복 (9)
      • 이분 탐색 (7)
      • 기타 문제 (17)
      • 별 찍기 문제 모음 (2)
    • C++ - 백준 [BAEK JOON] (46)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (0)
      • 기타 문제 (4)
    • 자료구조 (18)
      • Java (18)
    • 알고리즘 (11)
      • Java (11)
    • 프로그래밍 기초 (6)
    • 이모저모 (2)
    • 일상의 글 (2)

최근 글

정보

ST_의 Stranger's LAB

Stranger's LAB

ST_

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © ST_.

티스토리툴바