code-lab1의 등록된 링크

키자드에 등록된 총 302개의 포스트를 확인하실 수 있습니다.

Tistory

[Web] 포워드 프록시(Forward Proxy)란? 리버스 프록시(Reverse Proxy)란?

프록시(Proxy)란? 프록시는 두 호스트가 통신할 때 서로 직접 통신하지 않고 중간에서 대리로 통신을 하도록 도와주는 것을 프록시(Proxy)라고 한다. 이러한 중계 역할을 하는 서버를 프록시 서버라고 부른다. 즉, 프록시 서버는 클라이언트와 서버 사이의 중계서버로서의 역할을 한다. 이러한 프록시 서버가 클라이언트와 서버 중간에 위치하면서, 클라이언트는 프록시서버를 서버로 인식하고 서버는 프록시 서버를 클라이언트로 인식하게 된다. 프록시서버는 위치에 따라 포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)로 나뉜다. 포워드 프록시(Forward Proxy)란? 포워드 프록시는 일반적으로 프록시, 프록시 서버 혹은 웹 프록시라고 불린다. 포워드 프록시는 클라이언트들 앞에 ..

Tistory

[백준] 20056번 마법사 상어와 파이어볼 (자바 풀이)

문제 https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 풀이 코드를 짜는 것보다 예외를 처리하는게 훨씬 어려웠던 문제였다. 우선 다음과 같은 Fireball 클래스를 만들었다. public static class Fireball{ int r;// 행 int c;// 열 int m;// 질량 int s;// 속력 int d;// 방향 Fireball(int r,int c,int m, int s,int d){ ..

Tistory

DB 커넥션 풀(Connection pool)이란? HikariCP란?

커넥션 비용 WAS(Web Application Server)와 데이터베이스 사이의 연결에는 많은 비용이 든다. MySQL 8.0을 기준으로 INSERT 문을 수행할 때 필요한 비용의 비율은 다음과 같다. 괄호 안의 숫자가 비율을 의미한다. 1. Connecting (3) 2. Sending query to server (2) 3. Parsing query (2) 4. Inserting row (1) 5. Inserting index(1) 6. Closing (1) 즉, 서버가 DB에 연결하기 위한 Connecting 비용이 가장 큰 비율을 차지한다. 이처럼 Connection을 생성하는 작업은 비용이 많이 드는 작업이다. 이를 보완할 수 있는 방법이 바로 Connection Pool이다. 커넥션 풀(C..

Tistory

[Web] 서블릿(Servlet)이란? 서블릿 컨테이너란?

서블릿(Servlet)이란? 자바 서블릿(Java Servlet)은 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. -위키피디아- 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 기존에 서버는 정적인 자료(HTML, 사진, 글 등)만을 주고받았다. 하지만 웹에 다양한 기능이 요구되면서 정적인 자료뿐만 아니라 사용자 요구에 맞춘 동적인 페이지들을 만들 필요가 생겼다. 이를 위해 만들어진 것이 바로 서블릿이다. 쉽게 말해 서블릿은 클라이언트의 요청에 맞춰 동적인 결과를 만들어 주는 자바 웹 프로그래밍 기술이라고 할 수 있다. 이러한 서블릿은 WAS(Web Application Server)의 서블릿 컨테이너 안에서 동작하게 된다...

Tistory

[Web] 템플릿 엔진, JSP, Thymeleaf란? 서버 사이드 템플릿 엔진 vs 클라이언트 사이드 템플릿 엔진

템플릿 엔진이란? 템플릿 엔진은 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어 또는 소프트웨어 컴포넌트를 말한다. 특히, 웹 템플릿 엔진은 웹 문서가 출력되는 템플릿 엔진을 말한다. 즉, 웹 템플릿 엔진은 지정된 템플릿 양식과 데이터가 합쳐져서 HTML 문서를 출력하는 소프트웨어를 말한다. 이후 웹 템플릿 엔진을 템플릿 엔진으로 부르겠다. 서버 사이드 템플릿 엔진 vs 클라이언트 사이드 템플릿 엔진 서버 사이드 템플릿 엔진은 서버에서 DB 혹은 API에서 가져온 데이터를 미리 정의된 템플릿(Template)에 넣어 HTML 문서를 만들어 클라이언트에 전달해주는 역할을 한다. 즉, HTML 코드에서 고정적으로 사용되는 부분은 템플릿으로 만들어두고 동적으로 생성..

Tistory

재밌는 코드 Donut-shaped C code에 대하여

얼마전에 유튜브에서 재밌는 C-code를 보게 되었다. https://youtu.be/DEqXNfs_HhY Donut-shaped C code 별로 쓸데는 없지만 재밌어 보여서 나도 구현해보고 싶어졌다. 하지만 구글에 Donut-shaped C code를 검색해봐도 제대로 된 코드를 찾기가 쉽지 않았다. 겨우 찾은 코드에서 몇가지 오류가 나는 것을 해결해서 완성한 코드는 다음과 같다. #include #include #include #include int main(){ int k; float A=0, B=0, i, j, z[1760]; char b[1760]; printf("\x1b[2J"); for(; ; ) { memset(b,32,1760); memset(z,0,7040); for(j=0; 6.28..

Tistory

[프로그래머스] 카카오_순위 검색 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/72412?language=java HTML 삽입 미리보기할 수 없는 소스

Tistory

CI/CD(Continuous Integration/Continuous Deployment)란?

CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법이다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포이다. 즉 CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 인테그레이션 헬(intergration hell))을 해결하기 위한 솔루션이다. 특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 라이프사이클 전체에 걸쳐 지속적인 자동화와 모니터링을 제공한다. 이러한 구축 사례를 일반적으로 "CI/CD" 파이프라인이라고 부르며, 개발 및 운영팀의 애자일 방식 협을 통해 지원된다. CI (Continuous Integration)이란? CI는 개발자를 위한 자동화 프..

Tistory

[프로그래머스] 카카오_합승 택시 요금 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/72413?language=java 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 풀이 이 문제는 접근법만 알면 간단한 문제이다. 예전..

Tistory

[운영체제] Memory Mapped I/O 와 I/O Mapped I/O란?

Memory Mapped I/O란? Memory Mapped I/O는 마이크로프로세서(CPU)가 입출력 장치를 접근할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식이다. -위키피디아- 즉, Memory Mapped I/O는 disk block을 메모리의 페이지에 매핑시켜준다. 따라서 CPU는 파일을 메모리에서 접근 가능하게 된다. 이를 통해 CPU는 read() 혹은 write()등의 System call을 사용하지 않고 메모리에 data를 읽고 쓰는 것처럼 사용 가능하다. Memory Mapped I/O의 특징은 다음과 같다. 1. 메모리의 일부 공간을 I/O 포트에 할당한다. 2. 많은 프로세스가 하나의 파일을 메모리에서 공유하는 것이 가능해진다. 3...

Tistory

[DB] 리플리케이션(Replication)이란? 클러스터링(Clustering)이란?

클러스터링(Clustering)이란? 클러스터링은 동일한 데이터베이스를 여러 대의 서버가 관리하도록 클러스터를 구축하는 것을 뜻한다. 이러한 클러스터링은 Active-Active 방식과 Active-StandBy 방식이 있다. 클러스터링을 하는 이유 [그림 1]과 같이 모든 DB 서버가 Active 상태면 하나의 서버에 이상이 생기더라도 바로 다른 서버를 이용해 정상적인 서비스 운영이 가능하다. 또한 클러스터링을 이용하게 되면 기존에 하나의 서버에 몰리던 부하를 여러 곳으로 분산시킬 수 있다. 즉, 로드밸런싱(Load Balancing)이 가능해진다. 클러스터링의 단점 하지만 클러스터링은 여러 대의 서버가 데이터베이스를 공유하므로 병목현상이 발생해 더 많은 비용이 발생할 수 있다. 특히, Active-A..

Tistory

[Web] 웹 서버(Web Server)와 WAS의 차이

웹 서버(Web Server) 웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. 정적 컨텐츠란 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠이다. 이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해준다. 이러한 웹 서버에는 Apache, NginX 등이 있다. WAS(Web Application Server) WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이다. HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이..

Tistory

[프로그래머스] 카카오_신규 아이디 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/72410?language=java 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 풀이 문제에 주어진대로 구현하면 되는 아주 간단한 문제이다. 코드를 보면 충분히 이해할 수 있다. 코드 class Solution { public String solution(String new_id) { // 1단계 String answer = new_id.toLowerCase(); // 2단계 String temp = "..

Tistory

[Spring] 스프링 패키지 구조, DAO, DTO, Entity, Repository 에 대하여, DTO를 사용하는 이유

스프링 패키지 구조 스프링 패키지를 나눌 때 전체적인 그림은 일반적으로 [그림 1]과 같다. 이렇게 계층을 나누어 관리하는 것이 유지 보수하기에 용이하며 디버깅하기도 쉽다. DTO, DAO, Repository 등 각각의 기능과 역할에 대해서 알아보자. Entity란? Entity는 DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 뜻한다. Entity는 DB의 테이블과 1대1 대응이며, 테이블에 가지지 않는 칼럼을 필드로 가져서는 안 된다. 또한 Entity 클래스는 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안되고 순수한 데이터 객체인 것이 좋다. (사실 중복되는 내용이 있을 경우 baseEntity를 만들어 상속할 수 있다) 예를 들어 DB의 Employee 라는 테이블에 id,..

Tistory

[DB] 파티셔닝(Partitioning)이란? 샤딩(Sharding)이란? 파티셔닝과 샤딩의 차이점

파티셔닝(Partitioning)이란? 파티셔닝이란 데이터베이스를 여러 부분으로 분할하는 것이다. VLDB(Very Large DBMS)와 같은 하나의 DBMS에 너무 큰 테이블이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생할 때 파티셔닝 기법을 이용해 해결할 수 있다. 즉, 파티셔닝은 큰 테이블이나 인덱스를 작은 파티션(Partition) 단위로 나누어 관리하는 기법을 뜻한다. 파티셔닝은 데이터베이스에서 중요한 튜닝 기법으로, 데이터가 너무 커져서 조회하는 시간이 길어질 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지게 된다. 이러한 파티셔닝을 이용하면 다음과 같은 이점을 얻을 수 있다. 1. 성능 (Performance) 특정 Query의 성능을 향상시킬 수 있다. 대용량 Dat..

Tistory

[백준] 17374번 비트베리 (자바 풀이)

문제 https://www.acmicpc.net/problem/17374 17374번: 비트베리 비트베리는 국내 최다 사용자를 확보하고 있는 간편암호화폐 지갑이다. 비트베리의 가장 큰 특징 중 하나는 카카오 계정으로 지갑을 만들고, 전화번호로 암호화폐를 주고받을 수 있는 점이다. www.acmicpc.net 풀이 수학적으로 까다로운 문제였다. 이 문제는 두 가지 방법을 사용해서 해결할 수 있다. 첫 번째 방법은 모든 비트와 베리를 코인으로 바꾼 뒤 코인을 비트와 1:1에 가깝게 배분하는 방법이다. 즉, 비트 -> 코인, 베리->코인 이후 코인-> 비트:코인 (1:1에 가깝게) 두 번째 방법은 모든 베리를 코인으로 바꾼 뒤 모든 코인을 비트로 바꾼 뒤 비트를 코인과 1:1에 가깝게 배분하는 방법이다. 즉,..

Tistory

[Web] HTTP 1.0 과 HTTP 1.1의 차이

HTTP란? HTTP(Hyper Text Transfer Protocol)는 인터넷에서 주로 사용하는 데이터를 송수신하기 위한 프로토콜이다. HTTP에 대한 자세한 내용은 다음을 참고하자. [네트워크] HTTP란? non-persistent HTTP vs persistent HTTP | RTT란? Web 과 HTTP 웹 페이지는 객체(object)로 구성된다. 객체(object)는 HTML 파일, JPEG 이미지, JAVA applet, 오디오 파일 등이 될 수 있다. 웹페이지는 여러 참조된 객체를 포함하는 기본 HTML 파일로 구성되며, code-lab1.tistory.com HTTP 1.0과 HTTP 1.1의 차이 1) Non-Persistent vs Persistent HTTP 1.0과 HTTP 1..

Tistory

[백준] 2140번 지뢰찾기 (자바 풀이)

문제 https://www.acmicpc.net/problem/2140 2140번: 지뢰찾기 지뢰찾기는 N×N에서 이뤄지는 게임이다. 보드의 곳곳에는 몇 개의 지뢰가 숨겨져 있고, 지뢰가 없는 칸에는 그 칸과 인접(상하좌우 및 대각선)해 있는 8개의 칸들에 몇 개의 지뢰가 숨겨져 있는 www.acmicpc.net 풀이 이 문제는 구현 + 그리디 알고리즘 문제이다. 배열의 테두리에서 지뢰를 넣을 수 있는 곳을 모두 체크해야 한다. 이때 8방향을 조사해서 지뢰를 넣을 수 있는 곳은 '*'로 표시해두고, 넣을 수 없는 곳이라면 '-'로 표시해두었다. 또한 이미 '*'로 표시되어 있다면 넣을 수 있는 지뢰의 개수를 1씩 감소시켰다. 마지막에 '*' 개수를 세고, 주의해야 할 점은 '#'으로 남아 있는 부분도 c..

Tistory

[백준] 4307번 개미 (자바 풀이)

문제 https://www.acmicpc.net/problem/4307 4307번: 개미 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 막대의 길이와 개미의 수 n이 주어진다. 다음 n개 줄에는 숫자가 하나씩 주어지며, 이 숫자는 개미의 초기 위치를 www.acmicpc.net 풀이 이 문제는 애드 훅 문제라고 하는데, 애드 훅이 뭔지 잘 모르겠어서 조사해봤다. 일반적으로 경쟁적 프로그래밍(Competitive Programming) 대회, 이른바 알고리즘 대회에서는 종종 애드혹(ad-hoc) 문제가 출제된다. 일반적으로 애드혹 문제라고 하는 것은 해당 문제를 풀기 위해 잘 알려진 정교한(sophisticated) 알고리즘을 적용하지 않고 해결할 수 있는 유형의 문제를 일컫..

Tistory

[백준] 11265번 끝나지 않는 파티 (자바 풀이)

문제 https://www.acmicpc.net/problem/11265 11265번: 끝나지 않는 파티 입력의 첫 번째 줄에는 파티장의 크기 N(5 ≤ N ≤ 500)과 서비스를 요청한 손님의 수 M(1 ≤ M ≤ 10,000) 이 주어진다. 각각의 파티장은 1번부터 N번까지 번호가 붙여져 있다. 다음에는 N개의 줄에 걸 www.acmicpc.net 풀이 플로이드-와샬 알고리즘을 사용하면 아주 간단하게 해결 가능하다. 단순한 문제이므로 코드를 참고하자. 코드 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Spring] AOP(Aspect Oriented Programming)란? 스프링 AOP란?

AOP (Aspect Oriented Programming)란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다. *모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것 예를 들어 핵심적인 관점은 비즈니스 로직이 될 수 있고, 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다. AOP는 흩어진 관심사(Crosscutting Concerns)를 모듈화 할 수 있는 프로그래밍 기법이다 [그림 1]과 같이 클래스 A, B, C에서 공통적으로 나타나는 색깔 블록은 중..

Tistory

[Web] API란? REST API란? RESTful 이란? REST 구성 요소, 특징, 장단점

API (Application Programming Interface)란? API는 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. -위키피디아- 위키피디아를 인용하자면 API의 정의는 위와 같다. 하지만 이 설명을 듣고는 이해하기가 쉽지 않다. API를 설명할 때 보통 식당의 점원으로 비유하곤 한다. 손님은 점원에게 음식을 주문하고, 점원은 주문을 요리사에게 전달한다. 요리사는 요리를 만들어 점원에게 주고, 점원은 손님에게 요리를 서빙한다. 이처럼 API는 식당의 점원과 같은 역할을 한다. 여기서 손님과 요리사는 프로그램으로 비유할 수 있다. 즉, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체라고 할 수 있다. A..

Tistory

2022 상반기 라인플러스 공채 코딩테스트 후기

라인플러스 코딩테스트 후기! 2022년 3월 26일 토요일, 10시부터 13시까지 라인플러스 상반기 공채 코딩테스트를 진행했다. 플랫폼은 프로그래머스를 이용했고, IDE에서 복사+붙여넣기도 가능하다(난 IDE를 안 썼지만) 우선 전체적인 난이도는 평이했지만... 실수를 하면 시간이 많이 부족할 듯 싶었다. 어려운 알고리즘 문제보단, 꼼꼼하게 실수하지 않고 구현을 잘하는 게 중요할 듯 싶었다. 문제에 대해 설명할 수는 없으니, 난이도만 간단하게 이야기하자면 1번 문제 : 간단한 문자열 처리 문제였다. 어렵지 않았으나 실수를 해서 시간을 조금 날렸다. 백준 실버 3~4 정도 난이도 2번 문제 : 문자열 처리와 Set 자료구조를 이용해서 해결했다. 이 문제에서도 큰 실수를 해서 시간을 많이 날렸다 ㅠㅠ 백준 ..

Tistory

[프로그래머스] 카카오_블록 이동하기 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/60063?language=java 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 풀이 나는 이 문제를 조금 복잡하게 푼 것 같다. 우선 Robot 클래스를 만들어서 x좌표와 y좌표, 현재 방향(0은 가로 1은 세로), 걸린 시간을 저장하게 만들었다. 참고로 방향이 가로일 때 x, y는 왼쪽 좌표 기준, 세로일 때 x, y는 위쪽 좌표를 기준으로 한 것이다. 이후 탐색은 BFS를 통해서 모든 경우의 수를 따지면 된다. 이때 상하좌우로 움직이는..

Tistory

[백준] 17825번 주사위 윷놀이 (자바 풀이)

문제 https://www.acmicpc.net/problem/17825 17825번: 주사위 윷놀이 첫째 줄에 주사위에서 나올 수 10개가 순서대로 주어진다. www.acmicpc.net 풀이 너무 어려운 문제였다. 이 문제는 보드판을 연결 리스트로 표현해서 풀면 해결할 수 있다. class Node{ int val; boolean isEmpty, isFinish; Node next, fastPath; Node(int val){ this.val = val; this.isEmpty = true; } // 노드 연결 Node addNext(int value) { Node nextNode = new Node(value); this.next = nextNode; return nextNode; } // 시작지점..

Tistory

[Spring] 빈 스코프(Bean Scope)란? Dependency Lookup(DL)이란?

빈 스코프(Bean Scope)란? 빈 스코프는 말 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤(Singleton) : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입(Prototype) : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 싱글톤 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 ..

Tistory

2022 SK ICT Family 개발자 채용 챌린지 후기 (SK 코딩 테스트 후기)

1차 코딩 테스트는 2022년 3월 12(토) 10시~13시까지 총 3시간 동안 4문제를 풀어야 했다. 플랫폼은 프로그래머스를 이용했고, IDE를 사용해서 복사+붙여넣기도 가능했다. 제출 하더라도 정답을 알 수 없다. 테스트 케이스에 대한 결과만 나오기 때문에 예외 케이스를 잘 고려해야 했다. 아무래도 문제에 대해서 말할 수는 없기 때문에, 난이도가 어땠는지 대충 말하자면 다음과 같다. 1번 문제 : Greedy 알고리즘을 사용한 간단한 문제였던 것 같다. 백준 실버2~ 골드5 정도 난이도 같았다. 2번 문제 : 조금 까다로운 구현 문제였다. 이 문제에서 시간을 많이 잡아먹었다. 그래도 다행히 잘 푼 것 같다. 백준 골드4정도 되는 문제 같았다. 3번 문제 : DP 문제였던 것 같은데, 시간도 부족하고 ..

Tistory

[Spring] 빈(Bean) 생명 주기 콜백에 대하여

데이터베이스 Connection Pool이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행할 수 있을까? 스프링 빈 생명 주기 콜백 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 개발자가 의존 관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프..

Tistory

[백준] 2531번 회전 초밥 (자바 풀이)

문제 https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 풀이 이 문제는 투 포인터 문제이다. 그냥 모든 경우의 수를 다 보면 O(N^2)으로 시간초과가 발생한다. 투 포인터 방식을 사용하면 O(N)에 문제를 해결할 수 있다. 나는 슬라이딩 윈도우 방식처럼 투 포인터를 사용하고 HashMap을 사용하여 해결하였다. 예를 들어 8 30 4 30 7 9 7 30 2 7 9 25 위와 같은 예제는. {7,9,7,3..

Tistory

[컴퓨터 아키텍처] 부동소수점(Floating Point)이란?

부동소수점(Floating Point)이란? 부동소수점이란 실수를 컴퓨터 상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다. 부동소수점의 표준(Standard)은 IEEE에서 제안한 IEEE 754이다. IEEE 754에 따른 부동소수점의 표현은 아래와 같다. 부동소수점은 Single Precision(32-bit), Double Precision(64-bit)로 나타낼 수 있다. S : sign bit로, 1bit를 차지하며 0은 양수를, 1은 음수를 나타낸다. Exponent : 지수를 표현한다. 실제 exponet에 Bias를 더해서 기록한다 Single Precision ..

Tistory

[백준] 1965번 상자넣기 (자바 풀이)

문제 https://www.acmicpc.net/problem/1965 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 www.acmicpc.net 풀이 이 문제는 최장 증가 부분 수열(LIS) 문제이다. LIS에 대해서는 다음 게시글이 설명을 자세하게 있으니 참고하자 https://sskl660.tistory.com/89 [Java]최장 증가 부분 수열(LIS, Longest Increasing Subsequence) *최장 증가 부분 수열(LIS, Longest Increasing Subsequence) ->최장 증가 부분 수열이란, 주어진 ..

Tistory

[백준] 2096번 내려가기 (자바 풀이)

문제 https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 풀이 이 문제는 간단한 DP 문제였다. maxDp와 minDP를 따로 나누어서 해결하면 간단하다. 우선, maxDp의 경우는 아래와 같은 점화식을 세우면 된다. maxDp[i][j] = i번째 줄에서 j번째 숫자를 선택할 때 최댓값 ( 0

Tistory

[컴퓨터 아키텍처] 리틀 엔디안(Little-endian) 과 빅 엔디안(Big -endian)이란?

바이트 저장 순서 컴퓨터는 데이터를 메모리에 저장할 때 Byte 단위로 나눠서 저장한다. 따라서 연속되는 바이트를 순서대로 저장해야 하는데, 이것을 바이트 저장 순서(Byte Order)라고 한다. 이때 바이트가 저장된 순서에 따라 빅 엔디안, 리틀 엔디안 두 가지 방식으로 나눌 수 있다. 빅 엔디안(Big-endian) 빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트(MSB : Most Significant Byte)부터 저장하는 방식이다. 이 방식은 평소 사람이 사용하는 선형 방식과 같아 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기 쉽다. 예를 들어, 아래와 같이 저장할 32bit 크기의 정수가 있다고 가정하자. 0x12345678 그럼 이 정수는 아래와 같이 4개의 byte (4byt..

Tistory

[컴퓨터 아키텍처] CISC란? RISC란? CISC와 RISC 차이

CISC (Complex Instruction Set Computer) CISC란 연산에 처리되는 복잡한 명령어 집합을 수백 개 이상 탑재하고 있는 프로세서이다. 인텔 계열의 모든 프로세서는 CISC 프로세서이다. CISC는 다음과 같은 특징을 갖는다. 1. 복잡하고 기능이 많은 명령어로 구성된 프로세서 2. 복합 명령을 가짐으로써 하위 호환성을 확보 3. 트랜지스터 집적에 있어 효율성이 떨어짐 4. 전력 소모가 큼 5. 속도가 느리고 가격이 비쌈 6. 호환성이 절대적으로 필요한 PC 환경에 사용 7. 명령어 해석에 필요한 회로가 복잡해 병렬 처리가 쉽지 않음 RISC (Reduced Instruction Set Computer) RISC란 적은 수의 명령어를 수행하도록 설계된 마이크로프로세서이다. 복잡..

Tistory

[Spring] 의존관계 자동 주입, 생성자 주입, 수정자 주입, 필드 주입 등, @RequiredArgsConstructor

다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 1. 생정자 주입 2. 수정자 주입(setter 주입) 3. 필드 주입 4. 일반 메서드 주입 생성자 주입 생성자 주입은 이름 그대로 생성자를 통해 의존관계를 주입받는 방법 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다 주로 불변, 필수 의존 관계에 사용한다 불변 처음에 세팅한 값을 변경하는 것을 허용하지 않는 것을 불변이라고 한다. 필수 변수에 final 키워드를 적용하면 무조건 값이 초기화되어야 한다. 따라서 해당 필드가 초기화되어있지 않으면 컴파일 오류를 발생시킨다. 생성자로 해당 필드를 필수로 초기화해야 한다. @Component public class PizzaService { private final PizzaRep..

Tistory

[백준] 1149번 RGB 거리 (자바 풀이)

문제 https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 풀이 처음에는 단순 DFS로 문제를 접근했다. 하지만 DFS를 사용하면 시간 초과가 발생한다. 이 문제는 DP를 사용해서 해결해야 한다. 점화식을 아래와 같이 세우면 된다. dp[i][j] = i번째 집을 j 색깔로 칠할 때 비용의 최솟값 dp[i][j] = Math.min(dp[i-1][0], dp[i-1][1], dp[i-1][2]) // 이때 j와 같은 숫자는 제외..

Tistory

[Spring] @Component, 컴포넌트 스캔이란?

컴포넌트 스캔(Component Scan) 컴포넌트 스캔이란 스프링이 스프링 빈(Bean)으로 등록될 준비가 된 클래스들을 스캔하여 빈(Bean)으로 등록해주는 과정을 말한다. @Component 어노테이션이 붙어있는 클래스들은 전부 컴포넌트 스캔의 대상이 된다. @Configuration, @Service, @Repository, @Controller, 등의 어노테이션에도 전부 @Component이 포함되어 있어 자동으로 컴포넌트 스캔의 대상이 된다. @ComponentScan과 컴포넌트 스캔 범위 컴포넌트 스캔을 사용하기 위해서는 설정 정보 클래스에 @ComponentScan 어노테이션을 붙여줘야 한다. 이때 컴포넌트 스캔의 범위는 설정 정보 클래스의 패키지를 포함한 모든 하위 패키지가 된다. 이때 ..

Tistory

[컴퓨터 아키텍처] CPU란? CPU 성능 측정, CPU Time, Clock Rate, IC, CPI

CPU(Central Processing Unit)란? CPU는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행, 처리하는 가장 핵심적인 컴퓨터의 제어 장치 혹은 그 기능을 내장한 칩이다. CPU는 외부에서 정보를 입력받아 기억하고 컴퓨터 프로그램의 명령어를 해석하여 연산하고 외부로 출력하는 역할을 한다. 쉽게 말해 컴퓨터의 두뇌와 같은 역할을 한다. CPU는 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행한다. CPU의 기본 구성은 명령어를 저장하는 역할을 하는 프로세서 레지스터, 연산을 담당하는 ALU, 명령어의 해석과 올바른 실행을 위하여 CPU를 내부적으로 제어하는 제어부와 내부 버스 등이 있다. CPU의 성능은 프로그램 로드 속도와 프로그램이 얼마나 원활하게 실행되는지에 큰 영향을 미친다..

Tistory

[백준] 1022번 소용돌이 예쁘게 출력하기 (자바 풀이)

문제 https://www.acmicpc.net/problem/1022 1022번: 소용돌이 예쁘게 출력하기 첫째 줄에 네 정수 r1, c1, r2, c2가 주어진다. www.acmicpc.net 풀이 모든 숫자를 계산해서 저장하는 것은 메모리의 한계로 가능하지 않다(10000*10000=1억 개의 int) 따라서 숫자는 계속해서 계산해나가면서, 범위에 있는 배열에만 값을 저장하면 된다. 이때 map[r2-r1+1][c2-c1+1] 을 선언해서 사용하면 된다. 자세한 내용은 코드를 참고하자. 코드 HTML 삽입 미리보기할 수 없는 소스

Tistory

[백준] 16926번 배열 돌리기 1 (자바 풀이)

문제 https://www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 풀이 이 문제는 단순 구현 문제이지만, 풀기 쉽지 않았다. 내 풀이는 다음과 같다. [그림 1]과 같이 temp 배열을 만들고, 사각형의 테두리를 기준으로 왼쪽 위부터 반시계방향으로 원소를 탐색하면서 R칸씩 밀어서 (범위를 벗어나면 나머지 연산) 저장해놓는다. 이후 다시 똑같은 순서로 탐색하면서 t..

Tistory

[백준] 17822번 원판 돌리기 (자바 풀이)

문제 https://www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 풀이 단순 구현 문제이다. 꼼꼼히 작성하는 게 중요하다! 나는 이 문제를 다음과 같이 해결했다. 먼저, 원판은 2차원 배열 circle [][]을 이용해서 표현했다. 이후 두 가지 함수를 작성했다. 1. 원판을 돌리는 함수 -> 시계, 반시계 방향을 기준으로 원판의 숫자를 돌린다. 인덱스 계산을 잘해야 한다. 2. 숫자를 지우는 함수 -> 모든 원소를 돌며 상하좌우를 탐색해 ..

Tistory

[백준] 1669번 멍멍이 쓰다듬기 (자바 풀이)

문제 https://www.acmicpc.net/problem/1669 1669번: 멍멍이 쓰다듬기 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그러다 오늘도 어김없이 그의 영원한 라이벌 멍멍이를 만나게 되었다. 원숭이는 멍멍이를 쓰다듬고 싶었다. 하지만 원숭이는 멍 www.acmicpc.net 풀이 나는 수학 문제가 너무 어렵다. 이 문제는 수열 문제로 생각을 잘해야 풀 수 있다. 키차이 Day 1 Day 2 Day 3 Day 4 Day 5 1cm 1 2cm 1 1 3cm 1 1 1 4cm 1 2 1 5cm 1 2 1 1 6cm 1 2 2 1 7cm 1 2 2 1 1 8cm 1 2 2 2 1 9cm 1 2 3 2 1 키차이에 따른 키 크는 과정이다. 잘보면 4cm, 9cm 는 1,2,..

Tistory

[프로그래밍 언어론] 형변환이란? 묵시적 형변환 과 명시적 형변환에 대하여

형변환(Type Conversion)이란? int a = 10; float b = 1.2; printf("%d", a+b); 형변환이란 데이터의 타입을 변경하는 것이다. 예를 들어 위와 같이 데이터 타입이 다른 두 변수를 더하는 연산을 하려고 하면 어떻게 될까? 오류가 발생하지는 않고 묵시적 형변환이 일어나게 된다. 묵시적 형변환(Implicit Type Conversion)이란? 묵시적 형변환이란 컴파일러에 의해 자동으로 형변환이 이루어지는 것을 말한다. 예를 들어 int a 와 float b를 더할 때 int a는 자동으로 float형으로 형변환이 이루어진다. 묵시적 형변환은 위 그림처럼 표현 범위가 좁은 데이터 타입에서 -> 넓은 데이터 타입으로의 변환만 허용된다. 예를 들어 int 형은 doubl..

Tistory

[Spring] 싱글톤 패턴 (Singleton Pattern), 싱글톤 컨테이너

싱글톤 패턴이란? 만약 스프링이 없는 순수한 DI 컨테이너 Appconfig에 고객들이 요청을 보낸다고 하자. DI 컨테이너는 요청을 받을 때마다 객체를 새로 생성할 것이다. 따라서 고객 트래픽이 초당 100건이 나오면 초당 100개의 객체가 생성되고 소멸된다. 이는 메모리 낭비가 매우 심하다. 해결 방안으로는 객체를 딱 1개만 생성하고 이를 공유하도록 설계하면 된다. 이것이 바로 싱글톤 패턴이다. 즉, 싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 따라서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static fina..

Tistory

[백준] 2239번 스도쿠 (자바 풀이)

문제 https://www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 풀이 꽤 까다로운 DFS+백트래킹 문제였다. 숫자가 행, 열, 3*3 보드에 존재하는지 O(1)에 체크하기 위해 1. HashSet row[10] 2. HashSet col[10] 3. HashSet board[10] 이렇게 3개의 HashSet 배열을 만들었다. 즉, 보드의 (x,y) 좌표에 특정 숫자를 넣으려고 하면, row[x] 와 col[y]에 해당 숫자가 있는지 체크하면 된다...

Tistory

[백준] 16946번 벽 부수고 이동하기4 (자바 풀이)

문제 https://www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net 풀이 처음에는 모든 벽에서 BFS를 돌려 모든 벽마다 갈 수 있는 곳을 세려고 했으나 이렇게 하면 시간초과가 난다 ㅠㅠ 그래서 다른 방법을 생각해냈다. 모든 0의 묶음을 개수로 표시하고, 해당 벽에서 4방향을 조사해서 다른 묶음이라면 0의 개수를 더해주기만 하면 된다. 예를 들어, 아래와 같은 상황이 있다고 하자. 010 1x2 110 -> xx2 (x는 벽, 숫자는 0..

Tistory

[프로그래머스] 카카오_자물쇠와 열쇠 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/60059?language=java 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 풀이 이 문제는 배열을 확장시켜서 풀면 쉽게 해결할 수 있다. 위와 같이 배열을 확장시켜서 차례대로 자물쇠와 키를 맞춰보면 된다. 이때 배열을 얼마나 확장시켜야 할까? 잘 보면 "자물쇠의 길이 + (키의 길이*2) - 2"만큼 확장시키면 된다는 것을 알 수 있다. 따라서 해결 과정은 다음과 같다. 1. "자물쇠의 길이 + (키의길이*2) - 2" 크기의 배열 map[][]을 만든다..

Tistory

[네트워크] MAC주소와 ARP(Address Resolution Protocol)란? | MAC 주소의 필요성

MAC 주소란? IP 주소는 네트워크 계층(Network Layer)에서 사용되는 주소다. 반면 MAC 주소는 데이터 링크 계층(Data Link Layer)에서 사용되는 주소로, LAN(Local Address Network)에서 목적지와 통신하기 위한 실질적인 주소이다. MAC 주소 예시 : 1A-2F-BB-76-09-AD MAC 주소는 위 예시처럼 48bit의 16진수를 사용한다. MAC 주소는 유일성을 위해 IEEE(전기 전자 기술자 협회)에서 관리하고 할당한다. 따라서 모든 네트워크 장비 혹은 컴퓨터는 NIC(Network Interface Card)에 고유한 MAC 주소를 가지고 있다. MAC 주소의 필요성 그런데 IP 주소가 있는데 MAC 주소가 따로 필요한 이유는 무엇일까? IP 주소는 논..

Tistory

[네트워크] 웹사이트 접속 과정에 대하여 (네트워크 과목 총 정리) | 주소창에 www.google.com을 입력하면 생기는 일

웹사이트 접속 과정 한 대학생이 캠퍼스에서 노트북으로 구글에 접속한다고 하자. 어떤 과정을 통해 사용자는 구글에 접속할 수 있을까? 이 게시글은 그동안 공부한 내용들을 총 정리한다고 볼 수 있다. 자세한 내용이 궁금하다면 참고 링크를 참고하자. 1. 목적지 IP 주소 확인 사용자가 웹 브라우저의 주소창에 www.google.com을 입력하면, 해당 목적지의 IP주소를 알아야 한다. 브라우저는 캐싱된 DNS 기록이 있는지 체크하고, 만약 캐시가 있다면 캐시의 정보를 이용하고 없다면 DNS 서버에 정보를 요청해야 한다. 참고 : [네트워크] 도메인(Domain)과 DNS(Domain Name System)란? 도메인(Domain)이란? 도메인은 웹 브라우저를 통해 특정 사이트에 진입할 때, IP 주소를 대신..

Tistory

[네트워크] 도메인(Domain)과 DNS(Domain Name System)란?

도메인(Domain)이란? 도메인은 웹 브라우저를 통해 특정 사이트에 진입할 때, IP 주소를 대신하여 사용하는 주소이다. 도메인을 이용하면 한눈에 파악하기 힘든 IP주소를 보다 분명하게 나타낼 수 있다. 예를 들어 구글의 IP 주소가 11.32.23.232 이라고 하자. 이것 보단 도메인인 www.google.com 훨씬 확인이 쉽다. DNS(Domain Name System)란? DNS는 도메인 이름을 IP주소로 변환하거나 IP주소를 도메인 이름으로 변환하는 일을 수행할 수 있도록 개발된 데이터베이스 시스템이다. DNS는 이름과 숫자 간의 매핑을 관리하여 마치 전화번호부와 같은 기능을 한다. DNS 서버에서 이름을 IP 주소로 변환하여 도메인 이름을 웹 브라우저에 입력할 때 최종 사용자를 어떤 서버에..

Tistory

[프로그래머스] 카카오_괄호 변환 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/60058?language=java 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 풀이 간단한 구현 문제로 정말 문제에서 시키는 대로 함수를 작성하면 끝이다. 자세한 내용은 코드를 참고하자. 코드 import java.util.*; class Solution { public String solution(String p) { String answer = dfs(p); return answer; } public sta..

Tistory

[백준] 1790번 수 이어 쓰기 2 (자바 풀이)

문제 https://www.acmicpc.net/problem/1790 1790번: 수 이어 쓰기 2 첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다. www.acmicpc.net 풀이 모든 수를 연결해서 풀면 시간초과 혹은 메모리 초과가 발생한다. 이 문제를 풀기 위해서는 다른 접근이 필요하다. 잘 생각해보면 아래와 같이 자릿수가 증가하면서 숫자의 갯수가 변하는 규칙을 알 수 있다. 자릿수 숫자 갯수 글자 갯수 1 9개 (1~9) 9개 2 90개 (10~99) 180개 3 900개 (100~999) 2700개 이 규칙을 이용하면 몇번째 글자가 어떤 숫자에 포함되어 있는지 알 수 있다. 예를 들어 2..

Tistory

[백준] 2146번 다리 만들기 (자바 풀이)

문제 https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 풀이 나는 이 문제를 조금 복잡하게 푼 것 같다. BFS를 두 개의 함수로 만들어 해결하였다. 아래와 같은 과정으로 해결하였다. 1. BFS를 통해 모든 섬을 찾고, 섬을 구별하기 위해 섬의 숫자를 1,2,3,4... 등으로 바꾼다. 또한 모든 섬의 가장자리를 따로 저장한다. 2. 따로 저장한 섬의 가장자리에서 BFS를 통해 다른 섬 까지의 최단거릴 구해서 갱신한다. 3. 최단거리를 출력한다. 코..

Tistory

[네트워크] DHCP(Dynamic Host Configuration Protocol)란?

DHCP(Dynamic Host Configuration Protocol)란? DHCP는 Host IP 구성 관리를 단순화하는 IP 표준이다. 동적 호스트 구성 프로토콜 표준에서는 DHCP 서버를 사용하여 IP 주소 및 관련된 기타 구성 세부 정보를 네트워크의 DHCP 사용 클라이언트에게 동적으로 할당하는 방법을 제공한다. 쉽게 말해서 DHCP 서버가 클라이언트의 IP주소, 서브넷 마스크, DNS 서버 IP주소, 임대 기간 등 다양한 네트워크 정보를 자동으로 할당해주는 프로토콜이라고 생각하면 된다. DHCP를 사용하면 이용자가 네트워크 정보를 직접 설정할 필요 없이 자동으로 그 설정이 가능하기 때문에 네트워크 관리가 용이해진다. 하지만 단점으로는 이용자가 DHCP 서버에 의존하게 되므로 DHCP 서버가 ..

Tistory

[프로그래머스] 카카오_문자열 압축 (자바 풀이)

문제 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 풀이 이 문제는 간단한 구현 문제이다. 문자열을 압축할 zip 함수를 만들어 해결하였다. 1개씩 묶는 것부터 s의 길이까지 묶는 갯수를 늘려서 가장 짧은 길이로 압축 되는 것을 확인 하면 된다. 코드 import java.util.*; class Solution { public int solution(String s) { int answer = 1000000; for(int i=1; i 1){ ret += String.valueOf(cnt) + pr..

Tistory

[백준] 11286번 절댓값 힙 (자바 풀이)

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 나는 이 문제를 Abs라는 클래스를 만들어 해결하였다. Abs 클래스는 Comparable 인터페이스를 구현하는 클래스로, 원래 자기의 값인 int num 멤버와 절댓값인 int abs를 멤버로 갖는다. 또한 compareTo 메소드를 Override하여 절댓값(abs)을 기준으로 작은 순, 절댓값이 같다면 원래 값(num)이 작은 순으로 정렬되게 한다. 이후 Ab..

Tistory

[백준] 17136번 색종이 붙이기 (자바 풀이)

문제 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크 www.acmicpc.net 풀이 이 문제는 DFS와 백트래킹을 사용하여 해결할 수 있다. DFS를 통해 모든 원소를 탐색하면서 색종이를 붙일 수 있는지 체크한다. 이때 색종이의 개수를 저장하는 배열을 하나 만들고, 색종이를 붙일 수 있다면 색종이를 붙인다. 이후 다시 dfs 탐색을 진행하는 식으로 해결하면 된다. 코드 import java.io.*; import java.util.*; public class ..

Tistory

[네트워크] 네이글 알고리즘(Nagle`s Algorithm)이란?

네이글 알고리즘이란? 네이글 알고리즘은 네트워크를 통해 전송해야 하는 패킷 수를 줄임으로써 TCP/IP 네트워크의 효율성을 향상하는 수단이다. John Nagle이라는 사람이 정의하여 Nagle 알고리즘이라고 불린다. RFC896에 정확한 내용이 기술되어 있는데, 이를 정리 요약하면 다음과 같다. RFC에는 응용 프로그램이 종종 크기가 1바이트에 불과한 작은 덩어리로 반복적으로 데이터를 내보내는 이른바 '스몰 패킷 문제'가 기술되고 있다. TCP 패킷은 40바이트 헤더를 가지므로, 1바이트의 정보를 보내기 위해 41바이트 패킷을 보내야 하는, 매우 비효율적인 오버헤드를 초래하게 된다. 이러한 비효율성은 수많은 패킷들이 동시에 전송되어 잠재적으로 Congestion Collapse(정체 붕괴)로 이어질 수..

Tistory

[DB] 데이터베이스 옵티마이저(Optimizer)란?

데이터베이스 옵티마이저란? 옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해 주는 DBMS 내부의 핵심 엔진이다. 사용자가 구조화된 질의어(SQL)로 결과 집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Execution Plan)이라고 한다. 옵티마이저의 SQL 최적화 과정은 다음과 같다. 1. 사용자가 던진 쿼리 수행을 위해, 후보군이 될만한 실행계획을 찾는다. 2. 데이터 딕셔너리(Data Dictionary)에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상 비용을 산정한다. 3. 각 실행계획을 비교하여 최저비용을 갖는 하나를 선택한다. ..

Tistory

[백준] 14431 소수마을 (자바 풀이)

문제 https://www.acmicpc.net/problem/14431 14431번: 소수마을 첫 번째 줄에 소수 마을의 위치 (X1,Y1)와 A마을의 위치 (X2,Y2)가 입력된다. 두 번째 줄에 경유할 수 있는 마을의 개수 N (0 ≤ N ≤ 4000)가 입력된다. 세 번째 줄부터 N+2번째 줄까지 경유 할 수 있는 마 www.acmicpc.net 풀이 이 문제는 소수를 구하는 알고리즘과 다익스트라 알고리즘을 이용해 해결할 수 있다. 1. 모든 정점들의 거리를 구하면서, 거리가 소수인 정점들만 연결한다. 2. 연결한 그래프를 다익스트라 알고리즘을 통해 최단거리를 계산한다. 이때 거리가 소수인지 판단하는 것은 에라토스테네스의 체 알고리즘을 사용해 미리 소수들을 구해놓았다. 코드 HTML 삽입 미리보기..

Tistory

[DB] 관계대수, 관계해석이란?

관계 대수란? 관계 대수는 관계형 데이터베이스에서 원하는 정보를 검색하기 위해 어떻게 유도하는가(how)를 기술하는 절차적인 언어이다. 즉, 관계 대수는 릴레이션을 처리하기 위해 연산자와 연산 규칙을 제공하는 언어로, 피연산자가 릴레이션이고 결과 또한 릴레이션이다. 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다. 대표적으로 순수 관계 연산자와 일반 집합 연산자가 있다. 1. 순수 관계 연산자 순수 관계 연산자란 관계 데이터 베이스에 적용할 수 있도록 특별히 개발한 관계 연산자를 말한다. 아래와 같은 연산자들이 존재한다. 1) Select select는 릴레이션에 존재하는 튜플 중에서 선택 조건을 만족하는 튜플의 부분집합을 구하여 새로운 릴레이션을 만든다. 릴레이션의 행에 해당하는 튜플..

Tistory

[DB] 시스템 카탈로그(System Catalog)란?

시스템 카탈로그란? 1. DBA의 도구로서 데이터베이스에 저장되어 있는 모든 데이터 개체들에 대한 정의나 명세에 대한 정보를 수록한 시스템 테이블이다. 2. 하나의 작은 데이터베이스 데이터 사전(Data dictionary)라고도 한다. 3. DDL의 결과로 생성되는 기본 테이블, 뷰, 인덱스, 데이터베이스, 접근 권한 등의 데이터베이스 구조 및 성능 평가를 위한 통계정보도 저장한다. 4. 데이터베이스의 스키마 정보, 스키마들 간의 사상 정보, DBMS의 특정 모듈을 필요로 하는 정보를 저장한다. 5. 시스템 카탈로그에 저장된 내용을 메타 데이터(Meta Data)라고 한다. + 스키마가 무엇인지 모른다면 다음을 참고하자. [DB] 스키마(Schema)란? 외부스키마, 개념스키마, 내부스키마 스키마(Sc..

Tistory

[백준] 1644번 소수의 연속합 (자바 풀이)

문제 https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 풀이 이 문제는 에라토스테네스의 체로 소수를 구한 다음, 투 포인터 알고리즘을 사용하는 것이 핵심이다. 먼저 에라토스테네스의 체를 사용하여, N까지의 모든 소수를 저장한다. 이후 투 포인터 알고리즘을 사용하기 위해 left 포인터와 right 포인터를 0으로 초기화한다. 어떤 수든 첫번째 소수는 2기 때문에 sum=2로 초기화해준다. 만약 sum이 N과 같다면 ans를 1 증가시키고, N보다 작다면 right 포인터를 오른쪽으로 한 칸 옮기고 sum에 올려준다. N보다 크다면 left 포인터가 가리키는 값을 감..

Tistory

[Spring] IoC,DI, 스프링 컨테이너(Container), 스프링 빈(Bean)이란?

IoC(Inversion of Control)란? IoC는 제어의 역전이라는 뜻으로 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 말한다. 이전에는 개발자가 객체를 생성하고 관리하며 프로그램의 제어 흐름을 스스로 조종했다. 하지만 Spring을 사용하면 스프링 컨테이너가 프로그램의 제어흐름을 제어하게 된다. DI(Dependency Injection)란? DI는 의존관계 주입이라는 뜻으로 여기서 의존관계(Dependency)는 어떠한 객체와 같이 수행(work with)되는 다른 객체와의 관계를 뜻한다. 더 자세한 내용은 다음을 참고 하자. [Spring] 의존관계 주입(Dependency Injection : DI)이란? 의존관계(Dependency)란? 의존관계 주입(Dep..

Tistory

[JAVA] 자바 String Constant Pool 이란?, String "=="와 equals의 차이

String Constant Pool이란? 아래와 같은 코드를 살펴보자. String a = "Java"; String b = "Java"; String c = new String("Java"); // 결과 : same if(a == b) { System.out.println("same"); }else { System.out.println("different"); } // 결과 : different if(a == c) { System.out.println("same"); }else { System.out.println("different"); } a와 b는 같다고 나오지만, a와 c는 다르다고 결과가 나온다. 이유가 뭘까? 자바의 String은 두 가지 방법으로 생성할 수 있다. 첫 번째 방법으로 문자열..

Tistory

[프로그래머스] 카카오_길찾기 게임 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/42892 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr 풀이 이 문제는 트리의 성질에 대해 잘 안다면 쉽게 해결할 수 있는 문제이다. 직접 이진트리를 구현하여 전위 순회, 후위 순회로 트리를 탐색하기만 하면 된다. 이때 이진트리를 구현하기 위해 Node 구조체를 만들어야 한다. 이후 y좌표가 큰 순서대로, y좌표가 같다면 x좌표가 작은 순서대로 정렬하여 저장한 리스트를 탐색하면서 이진트리를 구성하면 된다. 자세한..

Tistory

[프로그래밍 언어론] 객체 지향 설계 5원칙 (SOLID)란?

객체 지향 설계 5원칙 객체 지향 설계에는 다음과 같은 5가지 원칙이 있다. 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 2. OCP (Open-Closed Principle) : 개방 폐쇄 원칙 3. LSP (Liskov Substitution Principle) : 리스 코프 치환 원칙 4. ISP (Interface Segragation Principle) : 인터페이스 분리 원칙 5. DIP (Dependency Inversion Principle) : 의존 관계 역전 원칙 앞 글자들을 모아 SOLID라고 부르기도 한다. 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 하나의 클래스는 하나의 책임만 가져야..

Tistory

[Spring] 의존관계 주입(Dependency Injection), 의존성 주입, DI란?

의존관계(Dependency)란? 의존관계 주입(Dependency Injection)에 대하여 알아보기 전에 의존관계가 무엇인지 알아야 한다. 의존관계는 의존 대상 B가 변하면, 그것이 A에 영향을 미칠 때 A는 B와 의존관계라고 한다. 쉽게 말해 B가 변경되었을 때 그 영향이 A에 미치는 관계를 말한다. 예를 들어 다음과 같은 상황을 가정해보자. 피자 가게의 요리사는 피자 레시피에 의존한다. 만약 피자 레시피가 변경된다면, 요리사는 피자를 새로운 방법으로 만들게 된다. 레시피의 변화가 요리사에 미쳤기 때문에 요리사는 레시피에 의존한다라고 할 수 있다. 이를 코드로 나타내면 다음과 같다. public class PizzaChef{ private PizzaRecipe pizzaRecipe; public ..

Tistory

[백준] 1531번 투명 (자바풀이)

문제 https://www.acmicpc.net/problem/1531 1531번: 투명 첫째 줄에 N과 M이 주어진다. N은 0보다 크거나 같고, 50보다 작거나 같다. M은 0보다 크거나 같고, 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 종이의 좌표가 주어진다. 왼쪽 아래 모서리의 x, y좌 www.acmicpc.net 풀이 처음에 문제가 잘 이해가 안됐는데 다음과 같이 그림으로 이해하면 간단하다. 예제를 예시로 들면 다음과 같다. 예제는 M이 1이였으므로, 2개 이상의 종이가 겹쳐야 그림이 보이지 않는다. 따라서 (41,41)~(60,60) 부분의 그림 400개(20*20)와, (71,71)~(80,80) 부분의 그림 100개(10*10)를 합쳐서 500개의 그림이 보이지 않는 것이다. 해결법..

Tistory

[백준] 2655번 가장 높은 탑 쌓기 (자바 풀이)

문제 https://www.acmicpc.net/problem/2655 2655번: 가장높은탑쌓기 첫째 줄에는 입력될 벽돌의 수가 주어진다. 입력으로 주어지는 벽돌의 수는 최대 100개이다. 둘째 줄부터는 각 줄에 한 개의 벽돌에 관한 정보인 벽돌 밑면의 넓이, 벽돌의 높이 그리고 무게가 차 www.acmicpc.net 풀이 이 문제는 아래와 같은 제약 조건들이 존재한다. 벽돌은 회전시킬 수 없다. 즉, 옆면을 밑면으로 사용할 수 없다. 밑면의 넓이가 같은 벽돌은 없으며, 또한 무게가 같은 벽돌도 없다. 벽돌들의 높이는 같을 수도 있다. 탑을 쌓을 때 밑면이 좁은 벽돌 위에 밑면이 넓은 벽돌은 놓을 수 없다. 무게가 무거운 벽돌을 무게가 가벼운 벽돌 위에 놓을 수 없다. 결국 중요한 것은 밑면의 넓이가 ..

Tistory

[프로그래머스] 카카오_파일명 정렬 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17686?language=java 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램 programmers.co.kr 풀이 이 문제를 자바를 이용해 풀기 위해서는 comparable 인터페이스에 대해 알면 좋다. 나는 File 이라는 class를 만들어 comparable 인터페이스를 implements 하게 하였고, compareTo 함수를 오버라이딩하여 문제에 맞게 정렬할 수 있도록 설정하였다. 자세한 내용은 코드를 참고하면 알 수 ..

Tistory

[백준] 1111번 IQ Test (자바 풀이)

문제 https://www.acmicpc.net/problem/1111 1111번: IQ Test 다음 수를 출력한다. 만약 다음 수가 여러 개일 경우에는 A를 출력하고, 다음 수를 구할 수 없는 경우에는 B를 출력한다. www.acmicpc.net 풀이 처음 이 문제를 봤을 땐, a와 b를 -100부터 100까지만 판단해서 브루트 포스 방식으로 해결하려고 했다. 하지만 a와 b를 -10000~10000까지 전부 조사해도 틀리고, 그 이상은 시간이 엄청나게 오래걸린다. 그런데 점화식을 잘 보면, a를 쉽게 구할 수 있음을 알 수 있다. 1. arr[i+1] = arr[i]*a + b 2. arr[i] = arr[i-1]*a + b (arr[i+1]-arr[i]) = (arr[i]*a+b) - (arr[i..

Tistory

[DB] 스키마(Schema)란? 외부스키마, 개념스키마, 내부스키마

스키마(Schema)란? 스키마는 데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 것이다. 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 개체의 특성을 나타내는 속성(Attribute), 개체 사이에 존재하는 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관하여 기술한다. 쉽게 말해 DB 내에 데이터가 어떤 구조로 저장되는가를 나타내는 데이터베이스 구조를 스키마라고 한다. 스키마의 특징 1. 스키마는 데이터 사전(Data Dictionary)에 저장되며, 다른 이름으로 메타데이터(Meta Data)라고도 한다. -> 데이터 사전 : 시스템 전체에서 나타나는 데이터 항목들에 대한 정보를 지정한 중앙 저장소 2. 스키마는 현실 세계의 특정한 ..

Tistory

[DB] DDL, DML, DCL - 데이터베이스 언어

데이터베이스 언어란? 데이터베이스 언어는 데이터베이스를 구축하고 이용하기 위한 데이터베이스 시스템과의 통신 수단이다. DBMS를 통해 사용되며, 기능과 사용 목적에 따라 DDL, DML, DCL로 구분된다. DDL(Data Definition Language) - 데이터 저장 언어 DDL은 데이터베이스를 정의하는 언어이며 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체 골격을 결정하는 역할을 한다. 스키마, 도메인, 테이블, 뷰, 인덱스 등을 정의하거나 변경, 삭제할 때 사용된다. 예를 들어 아래와 같은 것들이 있다. 종류 역할 CREATE 데이터베이스, 테이블 생성 ALTER 테이블 수정 DROP 데이터베이스, 테이블 삭제 TRUNCATE 테이블 초기화 DML(Data Manipulation Lan..

Tistory

[DB] 뷰(View)란 무엇인가?

뷰(View)란? 뷰는 사용자에게 접근이 허용되는 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블이다. 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게는 있는 것처럼 간주된다. 뷰는 데이터 보정, 처리 과정 시험 등 임시적인 작업을 위한 용도로 활용된다. 뷰는 조인 문의 사용 최소화로 사용상의 편의성을 최대화한다. 특징 1. 뷰는 기본 테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다. 2. 뷰는 가상 테이블이므로 물리적으로 구현되어 있지 않다. 3. 데이터의 논리적 독립성을 제공한다. 4. 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야 삽입, 삭제, 갱신, 연산 등이 ..

Tistory

[프로그래머스] 카카오_방금그곡 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17683?language=java# 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 풀이 문자열 파싱을 잘 하면 어렵지 않게 풀 수 있는 문제다. 아래와 같은 함수들을 작성해서 이용했다. 1. C# -> c, D# - >d 처럼 #이 붙은 문자열을 바꿔주는 함수 2. 12:00, 12:10 -> "10을 반환" 하는 것처럼 문자열에서 시간을 구하는 함수 자세한 내용은 코드를 참고하자. 코드 HTML ..

Tistory

[프로그래머스] 카카오_압축 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17684 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 풀이 간단한 구현 문제이다. 문제에서 하라는대로만 잘 구현하면 되는 어려울게 없는 문제이다. 우선 사전으로 사용할 HashMap를 선언해 'A'부터 'Z'까지 저장한다. 이후 한 글자씩 판단하면서 w와 c를 적절히 찾아서 사전에 추가해주면 된다. 자세한건 코드를 참고하자. 코드 HTML 삽입 미리보기할 수 없는 소스

Tistory

[백준] 10844번 쉬운 계단 수 (자바 풀이)

문제 https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 이 문제는 다이나믹 프로그래밍을 이용해서 해결할 수 있다. Top-down 방식 혹은 Bottom-up 방식을 사용할 수 있는데, 나는 Bottom-up 방식을 사용하였다. dp 배열을 2차원 배열로 만들어서 사용하면 되는데, 그 의미는 다음과 같다. 예를 들어 dp[3][5]는 3번째 자릿수가 5일때 계단 수이다. 이걸 어떻게 구할 수 있을까? N=3일때 dp[3][5]는 dp[2][4] + dp[2][6] 이다. 즉, 두 번째 자릿수가 4이거나 6일때의 계단수를 더하면 된다. 이 때 주의해야 할 ..

Tistory

[프로그래밍 언어론] 컴파일러와 인터프리터의 차이점

컴파일러(Compiler)란? 컴파일러는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. (출처:https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC) 컴파일러는 high-level 프로그래밍 언어(ex: C언어)를 low-level 언어(ex: 어셈블리어)로 바꾸어 실행 프로그램을 만들기 위해 사용된다. 원래의 문서를 소스코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 인터프리터(Interpreter)란? 인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. (..

Tistory

[백준] 1967번 트리의 지름 (자바 풀이)

문제 https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 풀이 트리의 지름을 구하기 위해서는 한 가지 규칙을 찾아내야한다. 그 규칙은 바로 트리의 지름은 리프노드와 리프노드 간의 거리라는 것이다. 따라서 모든 리프 노드에서 DFS탐색을 하여 다른 리프노드까지의 거리를 구하고, 최대 거리를 갱신하면 된다. 이때, 리프노드를 구별하는 방법은 루트노드가 아니면서 연결 노드가 1개(부모노드)뿐인 노드를 구하면 된다. 리프노드를 따로 구..

Tistory

윈도우10 Git 자동 push 배치 파일 만들기

자동 push의 필요성 나는 매일 알고리즘 문제를 풀어서 GitHub에 push 하려고 노력하고 있다. 일명 1일 1커밋으로 잔디밭을 만들기 위해서이다. 따라서 매번 알고리즘 문제를 해결한 소스파일을 [그림 1]과 같이 Git 명령어를 직접 입력하여 push 했다. 이 과정이 너무 귀찮아서 클릭 한번으로 자동으로 push 해줄 수 있는 배치 파일을 만들기로 했다. .bat 파일 작성 만드는 방법은 아주 간단하다. 텍스트 파일로 아래와 같이 작성하면 된다. git add * git commit -m "auto push" git push origin master push 뒤에 자신이 remote로 등록한 이름으로 변경해주면 된다. 텍스트 파일에 위와 같이 입력한 후 해당 파일의 확장자를 .txt 에서 .ba..

Tistory

[백준] 1092번 배 (자바 풀이)

문제 https://www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 풀이 이 문제는 간단한 정렬과 그리디 알고리즘을 적용하여 풀 수 있다. 먼저 크레인과 박스를 내림차순으로 정렬한다. 이후 크레인과 박스를 순차적으로 대조하여 옮길 수 있다면 박스 리스트에서 박스를 제거한다. 간단한 방법이지만, 자료구조를 어떤 것을 사용하냐에 따라서 시간초과가 발생할 수 있다. 나는 처음에는 box를 제거할 때 시간이 O(1)밖에 걸리지 않는 LinkedLis..

Tistory

[백준] 11060번 점프 점프 (자바 풀이)

문제 https://www.acmicpc.net/problem/11060 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net 풀이 나는 이 문제를 그리디 알고리즘을 사용해서 풀었다. 현재 점프할 수 있는 곳 중에서 그 칸에 도착했을 때 가장 멀리 갈 수 있는 곳으로 점프하면 가장 빠르게 도착할 수 있다. 현재 점프할 수 있는 곳 중에서 가장 멀리 점프한다는 뜻이 아니다! 예시를 보자. 아래와 같이 시작한다. 1 2 0 1 3 2 1 5 4 2 x 이 상황에서는 최대 한칸 밖에 못 가므로 그냥 한 칸을 뛴..

Tistory

[백준] 11060번 점프 점프 (자바 풀이)

문제 https://www.acmicpc.net/problem/11060 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net 풀이 나는 이 문제를 그리디 알고리즘을 사용해서 풀었다. 현재 점프할 수 있는 곳 중에서 그 칸에 도착했을 때 가장 멀리 갈 수 있는 곳으로 점프하면 가장 빠르게 도착할 수 있다. 현재 점프할 수 있는 곳 중에서 가장 멀리 점프한다는 뜻이 아니다! 예시를 보자. 아래와 같이 시작한다. 1 2 0 1 3 2 1 5 4 2 x 이 상황에서는 최대 한칸 밖에 못 가므로 그냥 한 칸을 뛴..

Tistory

[백준] 14391번 종이 조각 비트마스킹 풀이(자바 풀이)

문제 https://www.acmicpc.net/problem/14391 14391번: 종이 조각 영선이는 숫자가 쓰여 있는 직사각형 종이를 가지고 있다. 종이는 1×1 크기의 정사각형 칸으로 나누어져 있고, 숫자는 각 칸에 하나씩 쓰여 있다. 행은 위에서부터 아래까지 번호가 매겨져 있고, www.acmicpc.net 풀이 N,M이 최대 4이므로 최대 2(가로,세로)^16=65536의 경우의 수가 있으므로 브루트포스 방식으로 해결가능하다. 재귀형식으로 각 원소를 가로로 택할지 세로로 택할지 선택할 수 있겠지만, 비트마스킹을 사용하면 더 간단하다. 예를 들어 아래와 같은 예제를 보자. 비트가 0이면 해당 숫자는 가로, 1이면 세로라고 판단하자. [그림 1]의 왼쪽그림은 오른쪽처럼 나타낼 수 있다. 이를 마..

Tistory

[JAVA] JVM(Java Virtual Machine)이란?

JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해준다. 이를 통해 자바 바이트 코드가 플랫폼에 독립적으로 어디서든 실행될 수 있게 한다. 즉, JVM 덕분에 OS에 상관없이 어디서든 JAVA 애플리케이션을 실행할 수 있게 된다. JVM 구성 1. Class Loader(클래스 로더) JVM내로 클래스파일(.class)를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. Runtime 시점에 클래스를 로딩하게 해 주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모..

Tistory

[백준] 3273번 두 수의 합 (자바 풀이)

문제 https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 풀이 이 문제는 두 가지 풀이가 가능하다. 첫번째는 Set을 이용한 방법이다. a + b = X 라는 식을 만족한다면, a = X-b 도 만족한다. 따라서 모든 원소를 Set에 넣은 다음, 첫 원소부터 탐색하며 X-i번째 원소가 Set에 존재한다면 두 수의 합이 X가 되는 것이므로 count 해준다. 이때 주의할 점은 이렇게 모든 원소를..

Tistory

[프로그래머스] 카카오_셔틀버스 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17678?language=java 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00" programmers.co.kr 풀이 우선 입력으로 들어온 String을 정수로 변환해 주는 함수를 작성했다. 간단하게 split() 함수를 이용해 시간과 분을 나누어서 계산했다. ArrayList에 시간 스케쥴을 저장하고 오름차순으로 정렬했다. 버스는 ..

Tistory

[프로그래머스] 카카오_추석 트래픽 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17676?language=java HTML 삽입 미리보기할 수 없는 소스 결과

Tistory

[JAVA] Garbage Collection(가비지 컬렉션)의 개념과 동작 과정

Garbage Collection(가비지 컬렉션)이란? JVM에는 Garbage Collecter(가비지 컬렉터)가 존재한다. 가비지 컬렉터는 더 이상 참조되지 않는 Garbage(가비지)라고 불리는 불필요한 메모리를 알아서 정리해주는 역할을 한다. 가비지 컬렉터가 주기적으로 메모리 누수를 방지하기 위해 메모리를 청소하는 과정을 Garbage Collection(이하 GC)라고 한다. JVM에 대해 잘 모른다면 다음을 참고하자. [JAVA] JVM(Java Virtual Machine)이란? JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을..

Tistory

[프로그래머스] 카카오_캐시 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17680?language=java HTML 삽입 미리보기할 수 없는 소스 결과

Tistory

[프로그래머스] 카카오_프렌즈4블록 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17679?language=java 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 풀이 이 문제는 기능별로 함수를 적절히 나누어 풀었다. 1. 2*2 블록이 같은지 체크하는 함수 2. 블록을 제거하는 함수 2*2 블록이 같은지 체크하는 것은 간단하다. 그냥 현재 블록을 기준으로 오른쪽, 아래, 오른쪽 아래가 같은지 체크하면 된다. 이때 조심할 것은 배열의 범위를 벗어나지 않도록 해야 한다...

Tistory

[프로그래머스] 카카오_뉴스 클러스터링 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17677?language=java 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr 풀이 이 문제는 정규표현식에 대해 알면 편하다. 우선 두 String의 문자열들을 추출해야 하는데, String의 처음부터 두 글자씩 끊어서 이것이 영문자로만 이루어져 있다면 HashMap 자료구조에 넣어준다. 여기서 영문자로만 이루어져 있는지 판단하는 것은 정규표현식을 이용할 수 있다. 만약 HashMap에 ..

Tistory

[백준] 1520번 내리막 길 (자바 풀이)

문제 https://www.acmicpc.net/problem/1520 1520번: 내리막 길 첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. www.acmicpc.net 풀이 처음 문제를 봤을 땐 DFS를 사용하면 간단하게 풀릴 것 같았다. 하지만 결과는 시간초과..... 이 문제는 단순히 DFS만을 사용하면 시간초과가 발생한다. DFS와 DP를 섞어서 사용해야 한다. 만약 DFS를 통해 모든 길을 탐색하던 도중 이미 탐색해서 경로를 계산한 좌표를 만난다면 굳이 다시 탐색을 할 필요는 없다. 따라서 이를 미리 저장해놓고 사용하면 된다. 코드 HTML 삽입 ..

Tistory

[프로그래머스] 다트 게임 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 풀이 간단한 구현 문제이다. 최대 3번의 다트를 던질 기회가 있다고 했으므로, int[3] 배열을 만들어서 점수를 기록하면 간단하다. 코드 HTML 삽입 미리보기할 수 없는 소스 결과

Tistory

[프로그래스] 카카오_비밀지도 (자바 풀이)

문제 https://programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 풀이 자바의 라이브러리를 이용해 10진수를 2진수 String으로 쉽게 변환할 수 있다. 이를 통해 쉽게 문제를 해결 할 수 있다. 다만 주의할 점은 String으로 변환 하였을 때 자릿수에 맞게 '0'을 넣어줘야 한다는 것이다. 코드 HTML 삽입 미리보기할 수 없는 소스 결과

Tistory

[백준] 1082 방 번호 (자바 풀이)

문제 https://www.acmicpc.net/problem/1082 1082번: 방 번호 스타트링크가 입주한 사무실은 방 번호를 직접 정할 수 있다. 방 번호를 정하려면 1층 문방구에서 파는 숫자를 구매해야 한다. 숫자를 구매하기 위해 준비한 금액은 M원이고, M원을 모두 사용해 www.acmicpc.net 풀이 숫자를 사서 가장 큰 숫자를 만드려면 어떻게 해야 할까? 아래와 같은 우선순위를 고려해야 할 것이다. 1. 자릿수를 가장 길게 만든다. 2. 맨 앞자리부터 가장 큰 수가 들어가야 한다. 따라서 우선 가장 저렴한 숫자를 최대한 많이 사서 자릿수를 최대한 길게 만든다. 이때 가장 저렴한 숫자가 0이라면, 두 번째로 저렴한 숫자를 맨 앞에 두고 이후 0을 최대한 많이 사서 붙인다. 자릿수를 가장 ..

Tistory

[백준] 9935번 문자열 폭발 (자바 풀이)

문제 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 풀이 처음에는 자바 String의 split() 기능을 이용해서 쉽게 해결하려고 했다. 하지만 이 방법을 사용하면 메모리 초과가 발생해버린다. 그 이유는 자바의 String은 불변(immutable)이라서 값을 바꿀때마다 매번 새로운 String을 할당하기 때문이다. 따라서 이 문제는 스택 혹은 StringBuilder를 이용해서 풀어야한다. 풀이는 간단하다. StringBui..

Tistory

[백준] 12865번 평범한 배낭 (자바 풀이)

문제 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 풀이 이 문제는 배낭 문제(Knapsack)로 유명한 문제이다. 처음 이 문제를 봤을 땐 그리디 알고리즘을 떠올렸다. 하지만 그리디 알고리즘으로는 이 문제를 해결할 수 없다. 배낭 문제는 짐을 쪼갤 수 있는 경우는 Fraction Knapsack Problem이라고 하고 그리디 알고리즘으로 해결할 수 있다. 짐을 쪼갤 수 없는..

Tistory

[백준] 2933_미네랄 (자바 풀이)

문제 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 풀이 이 문제의 풀이를 요약하자면 아래와 같다. 1. 왼쪽, 오른쪽 번갈아서 미네랄 파괴 2. 미네랄 파괴 후 공중에 떠있는 클러스터 BFS로 찾기 3. 공중에 떠있는 클러스터들을 아래로 내리기 먼저, 1번을 구현하는 것은 쉽다. 단순히 홀수, 짝수를 나누어 왼쪽에서부터 탐색, 오른쪽에서부터 탐색해서 'x'를 '.'으로 바꿔주기만 하면 된다. 2번을 구현하는 것은 조금 까다롭다. 우선 '공중에 떠있다'라는 것은 클러스터가 땅에 붙어있지 않다는 것을 의미한다. 이것은 BF..

1 2 3 4