Study 237

Java: BufferedReader / Writer와 StringTokenizer의 개념과 이해

버퍼(Buffer) 일종의 데이터를 담아둘 수 있는 큐이다. 원래 사용자가 키보드에서 값을 입력할 때마다 입력값을 하나씩 전송하는데 이것은 효율이 낮다. 메모리 영역인 버퍼를 통해 데이터를 모아두고 일시적으로 보냄으로 효율을 높힌다. 문자열 데이터로 이동하며 Input와 Output의 버퍼가 각각 다르다. Stream 방식(단방향, blocking)으로 작동하고 입력은 InputStream, 출력은 OutputStream을 사용한다. 사용을 끝내고 닫아주지 않으면 메모리 누수가 발생한다. 입력(I): BufferedReader 사용자의 입력값(input)을 한번에 모아 전송한다. I/O와 관련한 IOException예외 사용이 필수다. 입력시 사용하는 Stream은 InputStream이며 시스템에서 입..

Study/Java 2021.10.10

Baekjoon1157: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 추상화 1) 먼저 문자열을 대문자로 모두 바꾼다 2) 문자열에서 각 알파벳의 개수를 추출한다 i) 아스키코드 A~ Z(65번~122번)을 이용 ii) 각 알파벳의 개수를 담을 배열 생성(알파벳은 26개) 3) 가장 큰 알파벳의 개수를 추출한다 →반복문과 조건문을 통해 최대값을 구할 수 있다 4..

Study/Baekjoon 2021.10.10

Java: 아스키코드, Char, String 변환과 응용

아스키코드 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다. A: 65번 / a: 97번 아스키 코드의 활용 아스키 코드는 개념 정도만 짚고 넘어가고 이 포스팅에서는 변환을 다룬다 1) String은 Char로 쪼갤 수 있고 각각의 Char은 아스키 코드로 변환 가능하다 2) 아스키 코드를 반복문 등에 넣어 문자를 이용한 조건문을 만들 수 있다 1) String의 Char 변환 (String to Char) 굳이 String에서 C..

Study/Java 2021.10.10

Baekjoon1065: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 추상화 1) N은 자연수이다 2) 각 자리 수의 숫자를 얻어내야 한다 3) 각 자리 수가 등차수열을 이뤄야한다 제한조건과 확장성 판별 욕심이 들었다. 1000이 아니라 훨씬 큰 숫자들의 한수를 구할 수 있을까? 제한조건은 다음과 같았다 1) 숫자가 커지면 자리 수가 커진다. 각 자리를 구하기 위한 연산을 계속할 수 있는가? 2) 등차수열 판별을 하기위한 각 자리끼리의 연산도 많아진다 위 제한조건에 따..

Study/Baekjoon 2021.10.09

Baekjoon4673: 셀프 넘버, 논리 배열과 StringBuilder의 사용

이 글을 포스팅하기 위해 StringBuilder를 정리했다: https://devyoseph.tistory.com/38 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51..

Study/Baekjoon 2021.10.08

Java: StringBuilder의 사용

String의 단점 서로 다른 문자열 변수 두 개가 있고 그 둘을 더한다고 하자 String str1 = "Hello"; String str2 = "World"; str1 + str2는 "HelloWorld"가 되고 이 둘과는 연관없는 새로운 String 변수에 값이 저장된다. 즉, String 연산은 메모리의 낭비가 일어나기 쉽다(불변immutable 객체의 한계성) StringBuilder: String의 단점 보완 StringBuilder를 사용하면 추가적인 인스턴스를 생성없이 문자열의 연산을 수행한다. 기존의 데이터를 참조하는 방식인데 이로 인해 문자의 삽입과 삭제가 자유롭다. 하지만 StringBuilder가 곧 String은 아니다. 연산 이후 String으로 변환해주어야 한다(toString..

Study/Java 2021.10.08