문제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으로 설정해 준다. 그 다음은 현재 ..
프록시(Proxy)란 프록시는 사전적 의미로 대리인, 대리권한 등의 뜻을 지닌다. 즉 무언가를 대신해서 작업을 하거나, 중계를 한다는 뜻인데 이게 프로그래밍에서는 어떻게 적용되는 것일까? 정보처리기사를 공부해본 사람이라면 아마 한 번쯤 훑고 넘어간 개념일 것이다. 프로그래밍에서의 Proxy는 디자인 패턴의 GoF(Gang of Four)의 생성 패턴, 구조 패턴, 행동 패턴 중 구조 패턴에 속하는 디자인 패턴이다. 프록시의 역할은 클라이언트로부터 메서드 호출과 같은 요청이 들어오면 해당 요청을 대신해서 처리하는 역할을 한다. 실제 Subject 객체는 프록시를 통해서 요청을 받아서 처리를 하게 된다. 이렇게 말로 설명해서는 어려우니 예시를 통해 알아보자. 손님이 웨이터를 통해 주문을 하고 웨이터는 주문..
Reflection Reflect: 1. (거울·유리·물 위에 상을) 비추다 2. (빛·열·음을) 반사하다, 반향을 일으키다 반사체라는 뜻을 지니는 Reflection은 무엇을 반사한다는 것일까? JVM에서 자바 애플리케이션을 실행하기 위해서는 소스 코드가 컴파일러를 통해 바이트 코드로 변환되고, 변환된 바이트 코드는 클래스 로더를 통해 JVM 내부의 메모리 영역에 저장되는 과정을 거친다. 과정을 거치며 Method Area에 클래스의 필드, 메서드, 인터페이스 등의 메타 정보가 저장되게 된다. Reflection은 바로 해당 JVM 내의 메서드 영역의 데이터를 참조하여 클래스를 참조하고 검사하는 기능이다. 컴파일 하기 전에 소스 코드가 클래스라면 컴파일 후에 Method Area에 저장된 해당 클래스의..
Inheritance(상속) Composition: the nature of something's ingredients or constituents; the way in which a whole or mixture is made up. 구성. 어떤 것을 이루는 재료나 구성요소를 뜻함. 자바에서의 상속(Inheritance)이라고 하면 extends를 이용하여 자식 클래스가 부모 클래스를 상속받고, 상속받은 부모클래스의 메서드를 오버라이딩(overriding)을 통해 재정의하는 예시가 있다. 상속을 통한 코드 재사용성(중복 감소 및 유지보수 편리), 다형성(Polymorphism)(높은 코드 유연성 및 추상적 코드), 확장성(쉬운 기능 확장), 추상화와 캡슐화(응집도 증가 및 결합도 감소) 등의 장점들이 ..
Intrinsic : belongs naturally, essential 이전의 Thread 포스트를 통해 자바에서의 스레드 동기화가 왜 필요한지, 또 어떻게 수행하는지에 대해 알아보았다. 자바의 멀티스레딩에서는 여러 스레드가 하나의 공유자원에 접근하여 작업을 수행하게 된다. 스레드 간에 작업을 통해 발생하는 변경사항이 공유자원에 반영되지 않은 채로 작업이 반복되면 데이터의 일관성을 해치고 스레드 간 작업을 통해 원하는 결과와는 다른 결과가 도출되게 된다. 이를 막기 위해서 존재하는 것이 스레드 동기화이다. Intrinsic Lock 동기화를 위한 자바의 lock의 종류 중 하나인 Intrinsic Lock에 대해 알아보자. 모든 자바 객체는 lock을 지니며, 각 객체가 지니는 lock은 고유 락(in..