Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- .net
- minimalAPI
- React
- ORM
- EFCore
- 대전본식영상
- error
- intellij
- extjs
- Store
- dbContext
- scanner
- vscode
- lazy loading
- ViewModel
- Request
- c#코딩의기술실전편
- LINQ
- mac
- JSON
- 명시적외래키
- JavaScript
- c#
- 코드프로그래머스
- 라도무스dvd
- extraParams
- 에스가든스냅
- 스냅잘찍음
- 상속
- Config
Archives
- Today
- Total
ejyoo's 개발 노트
[코딩 기초 트레이닝] 문자열 출력하기 본문
문제, 초기 솔루션
[문제]
문자열 str이 주어질 때, str을 출력하는 코드를 작성해 보세요.
[제한사항]
- 1 ≤ str의 길이 ≤ 1,000,000
- str에는 공백이 없으며, 첫째 줄에 한 줄로만 주어집니다.
[입출력예]
- 입력 #1
HelloWorld!
- 출력 #1
HelloWorld!
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
}
}
위의 문제는 주어진 문자열 'str'을 출력하는 것이다.
문제 풀이
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(str);
}
}
솔루션에서 Scanner 객체를 생성해서 사용자의 입력을 받고 next() 로 저장한다.
제한사항은 코드프로그래머스가 제공하는 테스트 코드에대한 제한사항 같다.
- 1 ≤ str의 길이 ≤ 1,000,000
- str에는 공백이 없으며, 첫째 줄에 한 줄로만 주어집니다.
Scanner 의 next 는 메서드 공백을 기준으로 입력을 나누기 때문에 제한사항에 'str에는 공백이 없다' 로 되어있는 것이다.
그리고 str의 길이가 최대 1,000,000 까지 가능한다 하는 것은
Scanner 의 내부버퍼의 특성에 있다.
Sacnner의 내부버퍼 특성
Scanner는 정규식 기반으로 동작하는 객체로
next() 메서드가 입력 값을 처리할 때 내부적으로 'java.util.regex.Matcher'를 사용한다.
이것은 내부적으로 버퍼를 사용하는데, 기본 버퍼의 크기는 '1024' 문자(char)이고,
필요에 따라 시스템 가용 메모리 한도 내에서 내부 버퍼를 확장한다.
드문 사례지만 매우 큰 입력이 주어져서 Scanner의 내부 버퍼 확장이 시스템 메모리를 초과하게 되면
JVM 이 OutOfMemoryError를 발생시킬 수 있다.
그리고 내부 버퍼를 확장하는 과정에서 성능 저하도 생길 수 있다.
그래서 매우 큰 입력을 처리할 때 BufferedReader 를 사용하는 것이 더 빠를 수 있다.
BufferedReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.read();
System.out.println(str);
}
}
하지만 솔루션에는 Scanner를 사용하여 풀으라고 하는 것 같아서, BufferedReader보단 Scanner를 사용하여 문제를 풀었다.
'문제풀이 > 코드프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스-코딩기초트레이닝] 문자열변환 (0) | 2023.10.12 |
---|---|
완주하지 못한 선수 (0) | 2021.03.04 |
크레인 인형뽑기 (0) | 2021.03.03 |
신규 아이디 추천하기 (0) | 2021.03.03 |