문제https://www.acmicpc.net/problem/1622 풀이처음에 문제를 제대로 안 읽고 안일하게 생각하고 접근했다가 틀렸다.. a문자열 내에도 존재하고 b문자열 내에도 존재하는 부분 수열을 구해야 하는데, a문자열을 반복문으로 돌면서 알파벳이 문자열 b에도 존재하기만 하면 부분 순열로 처리한 후 Set에 넣어버렸다.. abcc, deccc와 같은 경우 부분 수열이 cc인데 위의 방법으로 코드를 짤 경우 부분 수열이 c로 처리되기에 당연히 틀릴 수 밖에 없다.// 틀린 답안import java.util.*;import java.io.*;class Main { public static void main(String[] args) throws IOException { Bu..
문제https://www.acmicpc.net/problem/14912 풀이간단한 브루트포스 문제다. 반복문을 통해 1부터 n까지의 숫자 num에 주어진 값 d가 총 몇 번 나타나는지 구하면 되는 문제이다. 다만 주의할 점은 d가 num에 포함되는지 판별하기 위해서는 num을 String타입으로, d를 char타입으로 변환하여 비교를 진행해야 한다. 2중 for문을 사용할 수도 있지만 stream의 filter를 사용하여 문제를 해결했다.import java.util.*;import java.io.*;class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..
문제https://www.acmicpc.net/problem/10282 풀이처음에 DFS / BFS인 줄 알았는데 노드 간에 weight가 존재하는 문제인걸 확인하고 Dijkstra 알고리즘으로 접근하였다.DFS / BFS와는 다르게 각 노드 간에 거리가 존재하기 때문에 노드마다 방문을 진행하면서 시작 노드 c부터 해당 노드까지의 최단거리를 매번 갱신해주어야 한다! 아래와 같이 1~3번 노드가 존재하고 각 노드 간 weight가 존재한다고 가정해 보자. 1번 노드에서 시작해서 3번노드까지의 최단거리를 구해보자.먼저 1번 노드에서 시작한다. 현재 노드를 1번 노드로 설정해 주고 visited 처리를 해준 후, 1번 노드에서 1번 노드까지의 거리는 0이기 때문에 거리를 0으로 설정해 준다. 그 다음은 현재 ..
Intrinsic : belongs naturally, essential 이전의 Thread 포스트를 통해 자바에서의 스레드 동기화가 왜 필요한지, 또 어떻게 수행하는지에 대해 알아보았다. 자바의 멀티스레딩에서는 여러 스레드가 하나의 공유자원에 접근하여 작업을 수행하게 된다. 스레드 간에 작업을 통해 발생하는 변경사항이 공유자원에 반영되지 않은 채로 작업이 반복되면 데이터의 일관성을 해치고 스레드 간 작업을 통해 원하는 결과와는 다른 결과가 도출되게 된다. 이를 막기 위해서 존재하는 것이 스레드 동기화이다. Intrinsic Lock 동기화를 위한 자바의 lock의 종류 중 하나인 Intrinsic Lock에 대해 알아보자. 모든 자바 객체는 lock을 지니며, 각 객체가 지니는 lock은 고유 락(in..
자바에서 문자열을 다루는 클래스인 String, StringBuilder, StringBuffer에 대해서 알아보자. String 우리가 흔히 알고 있는 문자열을 다룰 때 사용하는 기본적인 클래스이다. String도 concat이나 +로 문자열 연산 가능하지만 + 사용해서 String 인스턴스 결합 시에 기존 String 인스턴스에 내용을 추가하는 것이 아니라 내용이 합쳐진 새로운 String 인스턴스를 생성하기 때문에 결합을 많이 할수록 공간 낭비, 시간 낭비이다. StringBuffer & StringBuilder 그래서 나온 문자열 연산 전용 클래스가 StringBuffer와 StringBuilder이다. StringBuffer의 특징은 내부적으로 Buffer라는 공간을 가지기 때문에 문자열 추가가..
자바에서 저장한 Reference Type의 데이터들은 각자 OS마다 다른 메모리 주소를 가리키기 때문에 외부 환경에서의 자바에서 데이터에 접근하기 위해서는 Reference Type으로 저장된 데이터들의 Primitive Type으로의 전환이 필요하다. 시스템적으로는 JVM내의 메모리(힙, 스택)에 상주하는 객체 데이터를 바이트 형태로 변환하는 기술을 직렬화, 반대로 직렬화 되어 있는 바이트 형태의 데이터를 객체 데이터로 변환하여 JVM에 상주시키는 기술을 역직렬화라고 한다. 즉 데이터를 전송, 저장 가능한 형태로 변환하기 위해서 직렬화를 수행한다. 자바에서의 직렬화 & 역직렬화 직렬화 시 Object(객체) 데이터들은 Byte Stream 형태의 데이터로 변환된다. 역직렬화 시 Byte Stream ..