PS(Java)/백준

    직렬화(Serialize)와 역직렬화(Deserialize) - 작성중

    JSON은 Javascript Object Notation의 약자로 자바스크립트의 객체처럼 키:값으로 구성되었다고 붙여진 이름이다. 클라이언트와 서버 간 HTTP 통신을 위한 텍스트 데이터 포맷이다. 키와 값은 `""`로 감싸야 한다. 각 객체를 배열로 묶을 수 있다. 직렬화 객체에 저장된 데이터를 I/O 스트림에 출력하기 위해 연속적인(serial) 데이터로 변환하는 것 데이터를 전송하거나 받을 때 byte 문자열이어야 한다. 따라서 객체를 byte 문자열로 바꾸는 것을 말한다. 객체 -> 문자열, JSON 데이터 역직렬화(Deserialize) I/O 스트림에서 데이터를 읽어서 객체를 만드는 것 데이터를 전송받아 이런저런 처리를 하기 위해서는 객체로 변환해야 편리하다. 문자열,JSON 데이터 -> 객체

    [PS] 백준 1924번 2007년

    [PS] 백준 1924번 2007년

    문제 예제 풀이 이 문제는 영 모르겠어서 다른 분의 풀이를 참고했다. 입력받은 날짜의 요일을 출력하는 문제이고, 월마다의 일수는 다소 다르게 정해져있다. 따라서 요일을 계산하기 위해서는 해당 날짜 이전달까지의 총 일수까지 고려해서 요일을 세야한다. 예를 들어 5월 10일의 경우, (1월부터 4월까지의 총 일수 + 10일)을 7로 나눈 나머지를 계산해서 나머지가 1~6인 경우 순서대로 월~토요일, 나머지가 0인경우 일요일로 간주한다. 즉 5월 10일은 총 일수가 31+28+31+30 +10일= 130일이므로 130 % 7 = 2 이다. 그래서 화요일로 간주한다. 더 쉬운 예시로, 1월 3일은 (총 일수 3) % 7 = 3 이므로 수요일로 간주한다. 따라서 월마다의 총 일수가 저장된 배열을 선언하고, 결과에..

    [PS] 백준 11721번 열 개씩 끊어 출력하기

    [PS] 백준 11721번 열 개씩 끊어 출력하기

    문제 예제 풀이 출력되는 문자의 인덱스를 나타내보면 다음과 같다. 0~9 10~19 20~29 30~39i = X0~X9까지 문자 10개가 출력되고 i=X9일 때 개행한다. 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReade..

    [PS] 백준 11719번 그대로 출력하기 2

    [PS] 백준 11719번 그대로 출력하기 2

    문제 예제 새로 알게 된 것 StringBuilder 클래스 String 클래스는 문자열을 생성자로 넣어 인스턴스를 한 번 생성하고 나면 인스턴스가 가진 문자열 값을 변경하지 못한다. StringBuilder 클래스는 같은 인스턴스 안의 문자열(char 배열) 필드 값을 추가하거나 변경할 수 있다. 즉 원본 문자열을 바꿀 수 있다. 문자열을 다루는 메서드도 더 많이 포함되어 있다. Oracle Java documentation - StringBuilder append() : 문자열 덧붙임 capacity() : String이 저장된 char[] 배열 사이즈를 리턴함 delete(int start, int end) : 특정 위치의 문자열 제거 deleteCharAt(int index) : 특정 인덱스의 문..

    [PS] 백준 단계별로 풀기 - 10757번 큰 수 A+B

    int와 long이 표현할 수 있는 범위는 다음과 같다. int 범위 : -2,147,483,648 ~ 2,147,483,647 long 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ​ 처음에 unsginedLong을 사용하려고 했지만 되려 -1이 저장되더라... 자바에서는 권장되지 않는 방법이고 찾아보니 BigInteger 아주 큰 수를 다뤄야 할 경우 java.math의 BigInteger를 사용한다. 단 BigInteger는 문자열로 숫자를 저장하므로 사칙연산을 부호로 적용할 수는 없고 BigInteger.add(BigInteger) 이런 식으로 내부 메서드를 써야한다. Code import java.io.BufferedReader; i..

    [PS] 백준 단계별로 풀기 - 배열(2), 함수

    22-01-12 푼 문제 수 : 7개 3052번 나머지 : boolean 이 문제는 다소 오해할 수 있게 작성하신 것 같다, 주어진 숫자를 42로 나눈 나머지 중 서로 다른 값이 몇개 있는지 출력해야하는데, 나는 처음에 이렇게 이해했다. 예를 들어 나머지가 이렇게 나오면(39, 40, 41, 0, 1, 2, 40, 41, 0, 1) 40, 41, 0, 1 은 중복되니 39, 2만 서로 다른 값이 된다는 식으로... 뭐 예제를 제대로 봤다면 금방 이상함을 알아차렸을 텐데.ㅠ 실제 답은 서로 다른 값은 (39, 40, 41, 0, 1)로 6개이다. public static void main(String[] args) throws NumberFormatException, IOException { Buffere..

    [PS] 백준 단계별로 풀기 - 1차원 배열

    [PS] 백준 단계별로 풀기 - 1차원 배열

    02-01-11 푼 문제 수 : 3개 2562번 최댓값 : 괄호유무 out.write(max +"\n"+ idx+1); 틀린 이유: 괄호를 안쓰니까 값이 다르게 나왔다. out.write(max +"\n"+ (idx+1)); 2577문제 숫자의 개수 : int, long 자료형 크기 int는 4bytes(32bits)이다. 32bits에는 2^32개를 저장할 수 있다. 음수,양수,0을 표현해야하므로 표현할 수 있는 숫자의 범위는 -2147483648 ~ 2147483648 이다. 즉 10자리 숫자까지만 저장가능. long은 8bytes(64bits)이다. 2^64개를 저장할 수 있다. 그런데 기본적으로는 컴파일러가 int로 인식하며, int 보다 큰 값을 저장하기 위해서는 변수 초기화 시 끝에 L을 붙여..