처음에는 엄청 쉬울줄 알았다.

헌데 30 30 10을 보고 조금 더 생각해야한다고 깨달았다.

배열리스트를 사용해서 sort = 정렬하여 두번째 값을 쉽게 구할 수 있는 문제였다.

또 배열에 저장된 값을 특정 값으로 나눠주는 spilt를 사용하였다.



'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 1546번  (0) 2018.07.05
[JAVA 자바] 백준 10871번  (0) 2018.07.05
[JAVA 자바] 백준 15552번  (0) 2018.07.04
[JAVA] 백준 11721번  (0) 2018.07.04
[JAVA] 백준 11720번  (0) 2018.07.02

성능 향상 보조 스트림이란?

 : 프로그램의 성능은 입출력이 가장 늦은 장치를 따라가게 되는데요.

예를 들어서 CPU 랑 메모리의 성능이 아무리 좋다고 해도 하드 디스크의 입출력 늦다면

프로그램의 실행 성능은 하드 디스크의 처리 속도에 따라 맞춰갑니다.

네트워크도 느린 네트워크 환경이라면 컴퓨터의 성능이 좋더라도 메신저 또는 게임의 속도가 느려집니다.

이에 대한 완전한 해결책은 없는데요, 프로그램이 입출력 소스와 직접 작업하는 대신에

중간에 메모리 버퍼와 작업함으로써 실행 성능을 어느 정도 향상 시킬 수는 있습니다.

BufferedInputStream 과 BufferedOutputStream은 바이트 기반의 성능 향상 보조 스트림이고,

BufferedReader 와 BufferedWriter는 문자 기반 성능 향상 스트림입니다.


BufferedInputStream과 BufferedReader :

 BufferedInputStream은 바이트 입력 스트림에 연결되어서 버퍼를 제공해주는 보조 스트림입니다.

BufferedReader는 문자 입력 스트림에 연결되어서 버퍼를 제공해주는 스트림입니다.


위의 스트림은 둘 다 입력 소스로부터 자신의 내부 버퍼 크기만큼 데이터를 미리 읽고 버퍼에 저장합니다.

생성자 매개값으로 준 입력 스트림과 연결되어 8918 내부 버퍼 사이즈를 갖습니다.

BufferedInputStream bis = new BufferedInputStream(바이트 입력 스트림); //  최대 8912 바이트

BufferedReader br = new BufferedReader(문자 입력 스트림); // 최대 8912 문자


스트림이 데이터를 읽어들이는 방법은 InputStream / Reader 와 갖습니다.


예제)

import java.io.BufferedInputStream;

import java.io.FileInputStream;


public class Example {

 public static void main(String[] args) throws Exception {

  long start = 0;

  long end = 0;

  

  FileInputStream fis1 = new FileInputStream("파일 경로/image.jpg");

  start = System.currentTimeMillis();

  while(fis1.read() != -1) {}

  end = System.currentTimeMillis();

  System.out.println("사용하지 않았을 때 걸린 시간: " + (end-start) + "ms");

  fis1.close();

  

  FileInputStream fis2 = new FileInputStream("C:/apache-tomcat-8.0.20/webapps/thisisjava/src/forest.jpg");

  BufferedInputStream bis = new BufferedInputStream(fis2);

  start = System.currentTimeMillis();

  while(bis.read() != -1) {}

  end = System.currentTimeMillis();

  System.out.println("사용했을 때 걸린 시간: " + (end-start) + "ms");

  bis.close();

  fis2.close();

 }

}

예제를 실행시켜보면 시간 차이가 꽤 많이 나는 것을 확인할 수 있습니다.


예제2)

예제2) BufferedReader / readLine()메서드를 추가적으로 가지고 있음. 

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;


public class Example2 {

 public static void main(String[] args) throws Exception {  

  InputStream inputStream = System.in;

  Reader reader = new InputStreamReader(inputStream); 

  BufferedReader bufferedReader = new BufferedReader(reader);

  

  System.out.print("입력: ");

  String lineString = bufferedReader.readLine();

  

  System.out.println("출력: " + lineString); 

 }

 

}



BufferedOutPutStream :

바이트 출력 스트림에 연결되어서 버퍼를 제공해 주는 보조 스트림입니다.

BufferedWriter :

문자 출력 스트림에 연결되어 버퍼를 제공해주는 스트림입니다.


위 두 스트림은 프로그램에서 전송한 데이터를 내부에 두었다가 버퍼가 꽉 차면 버퍼의 모든

데이터들을 한번에 보냅니다.

BufferedOutputStream bufferedOutputStream

 = new BufferedOutputStream(바이트출력스트림); // 최대 8912바이트

BufferedWriter bufferedWriter

 = new BufferedWriter(문자출력스트림); // 최대 8912 문자


출력 방법은 OutputStream/ Writer 과 동일합니다.

예제)

성능차이를 보여주는 예제

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;


public class Example {

 public static void main(String[] args) throws Exception {

  FileInputStream fileInputStream = null;

  FileOutputStream fileOutputStream = null;

  BufferedInputStream bufferedInputStream = null;

  BufferedOutputStream bufferedOutputStream = null;

  

  int data = -1;

  long start = 0;

  long end = 0;

  

  fileInputStream = new FileInputStream("파일 경로/image.jpg");

  bufferedInputStream = new BufferedInputStream(fis);

  fileOutputStream = new FileOutputStream("C:/Temp/forest.jpg");    

  start = System.currentTimeMillis();

  while((data = bufferedInputStream.read()) != -1) {

   fileOutputStream.write(data);

  }

  fileOutputStream.flush();

  end = System.currentTimeMillis();

  fileOutputStream.close();

  bufferedInputStream.close();

  fileInputStream.close();

  System.out.println("사용하지 않았을 때 걸린 시간: " + (end-start) + "ms");

  

  fileInputStream = new FileInputStream("C:/apache-tomcat-8.0.20/webapps/thisisjava/src/forest.jpg");

  bufferedInputStream = new BufferedInputStream(fis);

  fileOutputStream = new FileOutputStream("C:/Temp/forest.jpg");  

  BufferedOutputStream = new BufferedOutputStream(fileOutputStream);

  start = System.currentTimeMillis(); // 시작시간

  while((data = bufferedInputStream.read()) != -1) {

   BufferedOutputStream.write(data);

  }

  BufferedOutputStream.flush();

  end = System.currentTimeMillis(); // 종료시간

  BufferedOutputStream.close();

  fileOutputStream.close();

  bufferedInputStream.close(); 

  fileInputStream.close();

  System.out.println("사용했을 때 걸린 시간: " + (end-start) + "ms");

 }

}



출처: http://altongmon.tistory.com/274 [IOS를 Java]



 이번 문제를 풀면서 Scanner 와 System.out.print를 쓰지 않고 버퍼를 사용했을때를 비교하면서 엄청난 속도 차이를 알게되었다.

버퍼를 사용하기 앞서서 버퍼의 장단점에 대해서 알아보는 시간이 필요할 거 같다. 그 부분은 따로 정보를 얻은 뒤 JAVA 이론 게시판에 업로드 하려한다.

indexOf를 사용하여 입력받은 String에서 자신이 원하는 값을 int형 index값에 저장할수있다.

이를 사용하여 substring에서 내가 원하는 띄어쓰기 부분까지의 값과 즉, 첫번째 숫자값과 띄어쓰기 부분다음과 한줄의 맨마지막값을 length()로 찾아 두개의 값을

각각 더해 값을 구한다.




'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 10871번  (0) 2018.07.05
[JAVA 자바] 백준 10817번  (0) 2018.07.05
[JAVA] 백준 11721번  (0) 2018.07.04
[JAVA] 백준 11720번  (0) 2018.07.02
[JAVA] 백준 2839번  (0) 2018.07.02

문제

알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

출력

입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 

단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.















substring(i,i+1)을 사용해 한글자씩 출력하려고 했다.


'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 10817번  (0) 2018.07.05
[JAVA 자바] 백준 15552번  (0) 2018.07.04
[JAVA] 백준 11720번  (0) 2018.07.02
[JAVA] 백준 2839번  (0) 2018.07.02
[JAVA] 백준 11718번  (0) 2018.07.02

JSP 프로그래밍을 하기 위해서 JAVA EE를 설치하고 Apache tomcat과 Eclipse를 연동하겠다.


다음 유튜브 경로는 

JSP Servlet 동영상 개발 환경 설정을 잘 설명한 유튜브 동영상이다. 참고하길 바란다.

https://www.youtube.com/watch?v=0cy1Oa-2DQg&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2&index=2




문제는 아무리 찾아봐도 내 이클립스에는 없다는 것이다. 도대체 어떻게 된걸까?

이클립스를 쓴지 얼마 안되는 사람이 자주 저지르는 실수 중 하나긴 하다.

사실 원인을 따지자면 설치때로 거슬러 올라간다.





이클립스가 매우 유명한 자바툴이라 마차 이클립스가 자바 전용인줄 아는 사람이 있다.

그러나 이클립스는 고작 그정도 작은 툴이 아니라 정말 모든걸 다 할 수 있는 어마어마한 툴이다.


여러분이 설치시에 web관련 프로젝트및 파일을 만들 수 없는 이유는 매우 간단하다.

설치시에 여러분은 Java Developers를 선택했다.

그러나 web을 하려면 Java EE Developers를 선택해야한다.

Java EE Developers는 Java Developers를 포함하고 웹까지 담고 있다.





Eclipse에서 Help->Install New Software를 눌러준다.





여기에 Work with에 http://download.eclipse.org/releases/oxygen(이놈엔 여러분 이클립스 버전을 적어라) 까지 타이핑하면 목록에 주루륵 생긴다.

이 목록은 여러분 이클립스버전에서 이클립스 재단이 직접 지원해주는 플러그인 목록이다.





드래그 해서 내려가면 저런 부분이 있다. 딱 찝어서 저 목록을 이야기하지는 않겠다.

왜냐하면 시대에 따라서 저 목록의 이름이 디게 많이 바꼈기 때문이다.

어쨋던 목록에 EE가 있는것을 다운받으면된다.





목록에 EE와 Web이 있는지 확인하면된다. 이제 Next와 Finish를 눌러주자.





설치가 진행된다.



다음은 Tomcat을 설치하는 과정이다
주소창에 tomcat.apache.org를 검색하고 다운로에서 Tomcat 9를 누른다.



그 후 zip 파일을 다운로드 받고 압축을 풀어준다.




그 후 이클립스에 접속하여 오른쪽 상단에 첫번째 아이콘을 클릭한 후 JAVA EE를 추가한다.

JAVA EE아이콘을 선택하고 


Window-> Show View -> Servers를 클릭한 후 서버를 선택한다.





톰캣 서버를 추가하고


프로젝트 추가하기




추가되면 아래 Server탭에 서버가 추가된다.










서버에 대한 설정을 해준다


Specify the server path (i.e. catalina.base) and deploy path. Server must be published with no modules present to make changes.


서버 경로 (예 : catalina.base)와 배포 경로를 지정하십시오. 변경하려면 모듈이없는 서버를 게시해야합니다.


Use Tomcat installation (takes control of Tomcat installation)


Tomcat 설치 사용 (Tomcat 설치를 제어 함)


publish module contexts to separate XML files


XML 파일을 분리하기 위해 모듈 컨텍스트 공개



포트 설정 HTTP/1.1 에 포트넘버를 바꿔주면된다.



이제 하단에 Servers 에서 시작버튼을 눌러 서버를 동작 시켜보자




그 후 Chrome을 켜서 http://localhost:8080 을 검색해보자

나는 포트번호를 8181로 바꿨다. 나중에 Oracle을 Eclipse와 연동할 때 내부적으로 포트번호 8080을 사용하기 때문이다.

Apache Tomcat/ 9.0.10 홈페이지가 뜨면 이클립스와 톰캣의 연동에 성공한 것이다.



설명을 한다고는 했지만 조금 정신이 없을 것이다.


https://www.youtube.com/watch?v=0cy1Oa-2DQg&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2&index=2


이곳에 들어가서 10분정도만 투자한다면 빠르게 연동할 수 있을것이다.


























JSP와 Servlet?? 어떤 개념을 가지고 있고 어떤 차이가 있는지 알아보도록 하겠다.

1. Servlet

 정확한 이해가 필요 할 듯 하다. 서블릿(servlet)은 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다. servlet은 Java코드 안에 HTML태그가 삽입되며 자바언어로 되어있다. .java가 확장자이다. 
 서블릿의 단어는 Server + Let의 합성어라고 알고 있는 사람도 있고 Server + Applet으로 알고 있는 사람도 있다. 사실 둘다 어려운 느낌이다. 하지만 쉽게 풀어보면 '클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 servlet 클래스의 구현 규칙을 지킨 자바프로그램'이라고 이해하면 좋을 듯하다. 
 서블릿(servlet)은 자바언어를 웹어플리케이션에 조금 더 개발하기 쉽게 하기 위해 만든 API(라이브러리, 클래스 들)이며 이 규약에 맞는 라이브러리나 클래스들을 상속 및 구현하여 만든 클래스들을 서블릿이라고 한다.

2. JSP(Java Server Pages)

 HTML을 코딩하기 너무 어렵고 불편해서 HTML 내부에 Java코드를 삽입하는 형식이 JSP이다. 다시 말해 서블릿의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술이다. 서블릿을 이용하게 되면 웹프로그래밍을 할 수 있지만 자바에 대한 지식이 필요하며 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면들이 있다. 때문에 서블릿을 작성하지 않고도 간편하게 웹프로그래밍을 구현하게 만든 기술이 JSP(Java Server Pages)이다.

 조금더 알아보자면 JSP(Java Server Pages)는 서블릿 기반의 '서버 스크립트 기술'이다.
여기서 스크립트 기술이란 ASP, PHP 처럼 미리 약속된 규정에 따라 간단한 키둬드를 조합하여 입력하면, 실행 시점에 각각의 키워드에 매핑이 되어 있는 어떤 코드로 변환 후에 실행되는 형태이다.

JSP는 Java소스로 사용하여 웹페이지에 접근하고 페이지 전환을 통하여 웹브라우저에 전달한다.
3. JSP와 Servlet의 차이 및 비교
Servlet
JSP
~ 자바코드로 구현하고 컴파일하고 배포해야 한다.
~ HTML태그로 문자열("")스크림으로 처리해야 한다.
~ 코드가 수정되면 다시 컴파일하고 배포해야 한다.
~ 키워드가 태그화 되어 서블릿에 비해 배우기 쉽다.
~ 자바코드를 <%%>태그 안에 처리해주어야 한다.
~ HTML처럼 태그를 사용하여 자바코드도 사용이 가능하다.
4. Servlet과 JSP의 역할

 내 용만 보게 된다면 서블릿이나 JSP나 만드는 방법에 차이가 있을 뿐 동일한 역할을 한다는 것을 알수 있다. 초기에 자바 웹개발은 서블릿을 이용한 개발이였다. 이후 JSP기술이 발표되면서 JSP형태의 개발이 유행하게 되고 지금에 와서 각각의 역할을 나누어 Servlet+JSP형태의 개발이 이루어지고 있다.

 JSP는 JSP기술의 장점을 최대한 활용 할 수 있는 웹에플리케이션 구조에서 사용자에게 결과를 보여주는 프리젠테이션 층을 담당하고 Servlet은 Servlet기술의 장점을 최대한 활용 할 수 있는 사용자의 요청을 받아 분석하고 비지니스 층과 통신하여 처리하고 처리한 결과를 다시 사용자에게 응답하는 컨트롤러 층을 담당한다.

5. MVC 패턴의 JSP와 Servlet

 얼마전까지만 하더라도 JSP만 이용한 개발(Model1 방식)이 유행하다 현재는 유지보수단계에서 많은 단점을 느껴 각각의 역할을 나누어 서블릿과 JSP를 동시에 사용하여 개발하는 방식(Model2 방식)으로 개발하고 있어 현재는 Servlet과 JSP를 나누어 사용하고 있다. 그리하여 JSP는 HTML태그 사용이 용이하고 자바코드 사용이 불편하기 때문에 웹어플리케이션에서 사용자에게 결과를 보여주는 View(Client)를 담당하고 Servlet은 자바코드 작성이 편리하기 때문에 주로 화면과 통신하여 자료를 받아 가공하고 가공한 자료를 다시 화면에 전달하는 Controller역할을 하고 있다.

~ JSP와 Servlet 동시에 사용 MVC모델(View는 JSP, Controller는 Servlet을 사용)
~ 프리젠테이션 로직과 비즈니스 로직 분리
(보여지는 부분은 HTML이 중심이 되는 JSP, 다른 자바클래스에게 데이터를 넘겨주는 부분은 Java코드가 중심이 되는 Servlet이 담당)
~ 유지보수 용이 

MVC패턴
Model2
기능
Model
서비스클래스 or 자바빈
~ 비지니스 로직을 처리하는 모든 것이 모델에 속한다. 컨트롤러부터 특정 로직에 대한 처리 요청(게시판 글쓰기, 회원 가입 등)이 들어오면 이를 수행하고 수행 결과를 컨트롤러에 반환한다.
(request 객체나 session객체에 저장하기도 함)
View
JSP페이지
~ 클라이언트에 출력되는 화면을 말한다. 모델1과는 달리 로직 처리를 위한 코드가 내포되어있지 않다. 요청 결과의 출력 뿐만 아니라 컨트롤러에 요청을 보내는 용도로도 사용된다.
(request객체나 session객체에 저장된 정보를 토대로 화면 출력)
Controller
Servlet
~ MVC패턴(Model2)모든 흐름제어츨 맡는다. 브라우저로 요청이 들어오면 어떤 요청이 들어오는지 분석하여 이 요청을 처리하기 위한 모델을 사용하여 처리한다. 사용한 모델로 부터 처리결과를 받으면 추가로 처리하거나 가공해야 할 정보가 있다면 처리 후 request객체나 session객체에 저장하고, View(JSP페이지)를 선택하여 Foward나 redirect하여 클라이언트에 출력한다.
장점
단점
~ 출력을 위한 뷰 코드와 로직처리를 위한 자바코드를 분리하기 때문에 JSP모델1에 비해 코드가 복잡하지 않다.
~ 뷰, 로직처리에 대한 분업이 용이하다.
~ 기능에 따라 분리되어 있기 때문에 유지보수가 용이하다.
~ 구조가 복잡하여 습득이 어렵고 작업량이 많다.
~ Java에 대한 깊은 이해도가 필요하다.

JSP파일은 결국 서블릿으로 변환이 되어 실행된다. JSP파일이 Servlet으로 변환되는 과정은 오직 한번만 일어나므로 같은 페이지에 수많은 사용자의 요청이 있더라도 처리속도는 거의 떨어지지 않게 된다. 만약 JSP페이지의 코딩 내용이 변경된다면 다시 변환 과정을 거친다. 즉 JSP가 서블릿을 기반으로 하고 있기 때문에 JSP의 동작 방식을 이해하기 위해서는 Servlet에 대한 이해도도 필요하다.

 지금까지 JSP와 Servlet에 관하여 알아봤습니다.


문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.


import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args) {

    int cnt = 0;

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        

       

        String a = sc.next();

        for(int i=0; i<n; i++) {

        cnt = cnt + a.charAt(i)-'0';

        }

        System.out.print(cnt);

    }

}





charAt()를 사용해서 String 변수에 저장 하여 사용 할 수 있다.


결과화면은 다음과 같다

예제 입력 1 

1
1

예제 출력 1 

1

예제 입력 2 

5
54321

예제 출력 2 

15

예제 입력 3 

25
7000000000000000000000000

예제 출력 3 

7


'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 10817번  (0) 2018.07.05
[JAVA 자바] 백준 15552번  (0) 2018.07.04
[JAVA] 백준 11721번  (0) 2018.07.04
[JAVA] 백준 2839번  (0) 2018.07.02
[JAVA] 백준 11718번  (0) 2018.07.02

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다.

 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지

 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.


1~ 30까지 정도의 값에서 패턴을 찾는다

그 후 mod 를 사용해 5로 나눠지는 값 5개를 switch case문을 이용해 각각 분별한다. 

18kg은 3kg 6개가 아닌 5kg 3개와 3kg 1개로 이루어 지고, 

11kg은 5kg 1개 , 6kg 2개로 이루어질 수 있다는 함정이 곳곳에 존재하니 실수하기 쉽다.


import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        sc.close();

         

        int count = n / 5;

         

        switch (n % 5) {

        case 0:

            System.out.println(count);

            break;

        case 1:

        System.out.println(count + 1);

            break;

        case 2:

            if (count < 2) {

                System.out.println(-1);

            } else {

                System.out.println(count + 2);

            }

            break;

        case 3:

            System.out.println(count + 1);

            break;

        case 4:

            if (count < 1) {

                System.out.println(-1);

            } else {

                System.out.println(count + 2);

            }

            break;

        }

         

    }

}

'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 10817번  (0) 2018.07.05
[JAVA 자바] 백준 15552번  (0) 2018.07.04
[JAVA] 백준 11721번  (0) 2018.07.04
[JAVA] 백준 11720번  (0) 2018.07.02
[JAVA] 백준 11718번  (0) 2018.07.02


백준 11718번


입력 받은 대로 출력하는 프로그램을 작성하시오.

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.



◎첫번째방식


import java.util.ArrayList;

import java.util.Scanner;


public class Main{

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while(sc.hasNext())

System.out.println(sc.nextLine());

}

}


출력값은 다음과 같다.


hasNext() 현재 위치에서 다음에 데이터가 있으면 true 없으면 false  


계속적으로 값을 적어주면 true 반환하게 되어 계속 실행된다.





◎두번째방식

isEmpty()를 사용해 한줄 전체가 비었을때 ArrayList에 저장되었던 모든 값들을 불러온다.

즉, 엔터를 연속으로 두번 눌러야지 값이 출력된다.

import java.util.ArrayList;

import java.util.Scanner;




public class Main {


public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

ArrayList<String> words = new ArrayList<>();

int cnt = 0; //횟수 100이상 제한 두기위해 사용

char a;

int clear = 0; //숫자, 알파벳 소문자,대문자가 아닌 다른 값이 들어갈때 ArrayList에 저장된 words를 초기화 하기 위해서 

while(sc.hasNextLine()) {

String sentence = sc.nextLine();

if(sentence.startsWith(" ")||sentence.endsWith(" ")||sentence.length()>100) {

System.out.println("다시 입력");

}

else if(cnt>=99){

System.out.println("100줄 초과");

break;

}

else{

String[] array = sentence.split("");

for(String word:array) {

for(int i=0; i<word.length(); i++) {

int index = word.charAt(i);

if(index>=48 && index<=57) {

}

else if(index>=65 && index<=90) {

}

else if(index>=97 && index<=122) {

}

else {

System.out.printf("잘못 입력 된 값:%s",word);

clear = 1;

}

//System.out.print(array[i]);

}

}

words.add(sentence);

cnt++;

if(clear==1) {

words.clear(); //ArrayList 초기화

clear=0;

}

}

if(sentence.isEmpty()) {

for(int i=0; i<words.size(); i++) {

System.out.println(words.get(i));

}

words.clear();

}

}

}


}




 //startsWith()은 sentence의 맨처음 값을 비교한다. endsWith()은 sentence의 맨 마지막 값을 비교한다. sentence.length()은 sentence의 글자 길이를 알려준다.

words.add(sentence); 은 words라는 ArrayList 객체에 sentence의 값을 넣어준다.

words.get(i)를 이용해서 ArrayList에 저장되 있던 값들을 모두 출력한다.


알고리즘 11718번을 통해 사용한 METHOD

hasNext()

startsWith()

 endsWith()

words.add(sentence)

words.get(i)

'백준 알고리즘 > JAVA' 카테고리의 다른 글

[JAVA 자바] 백준 10817번  (0) 2018.07.05
[JAVA 자바] 백준 15552번  (0) 2018.07.04
[JAVA] 백준 11721번  (0) 2018.07.04
[JAVA] 백준 11720번  (0) 2018.07.02
[JAVA] 백준 2839번  (0) 2018.07.02

안녕하세요~ 

블로그를 처음 개설해 봅니다.

IT 정보와 프로그래밍 관련 기록들을 블로그를 통해 공유 할 생각입니다.

감사합니다!

'IT 정보' 카테고리의 다른 글

restful api 란?  (0) 2018.08.31
IT SW개발자 취업팁  (0) 2018.08.11
프로그래머 면접 질문  (0) 2018.07.23

+ Recent posts