[백준] 3015 - 오아시스 재결합
·
etc.
모노톤 스택으로 풉니다만, 같은 키가 연달아 나올 때를 생각해야 해서 애먹었습니다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayDeque;class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); ArrayDeque stack = new..
[Java] 왜 자바는 리턴 타입으로 오버로딩을 허용하지 않는가
·
STUDY/CS | Algorithm
결론부터 말하자면, Java는 메서드 호출을 컴파일 타임에 결정하는데, 그때에는 리턴 타입 정보가 사용되지 않기 때문이다.이게 무슨 말일까? 자, 다음과 같은 코드가 있다고 하자. 어떻게 될까?int foo(int x) { return 1; }double foo(int x) { return 1.0; }foo(10);Duplicate method foo(int) in type Test이렇게 컴파일 에러가 나게 된다. 왜 오버로딩을 할 때 리턴 타입만 다르면 안 되는 걸까?이 질문에 답하려면, 우선 메서드 오버로딩과 오버라이딩의 차이에 대해 알고 가야 한다.메서드 오버로딩개념동일한 기능을 수행하는 메서드를 여러 형태로 정의하는 것일반적으로 메서드 이름은 기능 단위로 정함그런데, 같은 기능을 다양한 입력 형태..
[SSAFY] 싸피 3트한 사람의 15기 전공자 추가 합격 후기
·
etc./SSAFY
0. 들어가며SSAFY 15기 대전 캠퍼스에 전공자로 추가 합격했습니다.이 글이 싸피에 도전하시는 분들, 특히 n트째 도전 중이신 분들께 도움이 되길 바랍니다.1. 지원 동기저는 13기부터 14기, 그리고 15기에 이르기까지세 기수 연속 면접 탈락을 경험했습니다.13기대학을 막 졸업할 무렵의 저는 게임 클라이언트 개발자가 되고 싶었고,그만큼 싸피에 대한 간절함은 크지 않았습니다.대학 친구가 지원한다길래“어? 그럼 나도 한 번 넣어볼까?” 하는 가벼운 마음이었죠.결과는 당연히 탈락이었습니다.14기게임 클라이언트에서 백엔드로 진로를 전향하면서 상황이 달라졌습니다.웹 개발 경험이 거의 없던 터라, 싸피가 그제서야 간절해졌습니다. 이번에도 면접까지 갔지만, 당시에는 면접 경험이 거의 없어 긴장을 많이 했습니다...
2025년 회고 ~취준이라는 거대한 폭풍에서의 1년~
·
etc./회고
나의 2025년!정말 다사다난했고, 열심히 살았다!잘 살았는지와는 별개로, 정말 열심히 살았다.(그래서 너무 지쳤다) 회고 시작~!1. 프롤로그중학교 때부터 컴퓨터공학과 진학을 하고 싶었고, 그 이유는 게임을 개발하고 싶어서였다.대학 졸업 전까지 게임 클라이언트 개발자가 되고 싶었어서 캡스톤 디자인 주제도 게임이었다.그런데 25년의 시작과 동시에 게임 개발에서 백엔드로 전향하게 된다. (이유는 묻지 마시오) 문제는 내가 그간 준비했던 모든 것이 게임 개발에 집중되어있다는 거였다.웹개발은 커녕 자바도 많이 까먹은 상태였고, 어학도 자격증도 아무것도 없었다.알고리즘도 싸피 13기를 준비하면서 처음으로 풀어본 상태였다. 이 상태에서 어영부영 졸업을 하게 됐고, 그렇게 1년 간 부트캠프 없이 취준을 했다.2. ..
[알고리즘] 다익스트라가 뭐야 - 2
·
STUDY/CS | Algorithm
부제 ~ 벨만-포드, 플로이드-워셜이 뭐야 ~1. 개요 벨만–포드(Bellman–Ford) : 음수 가중치(엄밀히 말하면 음수 사이클)가 있어도 시작점에서 모든 정점 최단 거리를 구할 수 있음 플로이드–워셜(Floyd–Warshall) : 모든 정점 쌍 최단 거리를 한 번에 구할 수 있음2. 작동 원리벨만–포드`dist[start]=0`, 나머지는 `∞`로 초기화간선 전체를 V-1번 순회하면서 dist[v] = min(dist[v], dist[u] + w) 형태로 완화(Relaxation)한 번 더(=V번째) 모든 간선을 검사했을 때 값이 줄어들면 음수 사이클 존재플로이드–워셜`dist[i][j]`를 (i→j의 직접 간선 가중치, 없으면 ∞)로 초기화, `dist[i][i]=0`중간 경유지 k를 1..N..
[알고리즘] 다익스트라가 뭐야 - 1
·
STUDY/CS | Algorithm
1. 개요다익스트라 알고리즘은 가중치가 있는 그래프에서 하나의 시작점에서 다른 모든 정점까지의 최단 거리를 구하는 알고리즘이다.매 단계마다 도달할 수 있는 정점 중, 가장 가까운 정점을 선택해 거리를 확정한다.BFS랑 비슷해 보이지만, BFS는 모든 간선의 가중치가 1일 때만 사용가능하다. 최단 거리 알고리즘에는 다익스트라 외에도 벨만-포드, 플로이드-워셜 알고리즘이 있다.(이 부분은 2부에서 자세히 다루겠다.)2. 작동 원리시작 노드의 거리를 0, 나머지 노드는 무한대(∞)로 초기화아직 방문하지 않은 노드 중 가장 짧은 거리의 노드 선택 -> 확정해당 노드를 거쳐 갈 때, 다른 노드로 가는 더 짧은 경로가 있다면 그 노드의 거리 갱신모든 노드를 방문할 때까지 반복확정된 최단 거리는 다시 갱신되지 않는다..
[CS] 면접 회고
·
STUDY/CS | Algorithm
1. IP랑 포트 왜 쓰나요?IP : 네트워크 상의 호스트 주소포트 : 한 컴퓨터 안에서 실행되는 프로세스 구분IP는 '어느 컴퓨터로 갈지', 포트는 '그 컴퓨터의 어느 프로그램으로 갈지'를 구분한다.2. CORS가 뭔가요?브라우저는 보안을 위해 동일 출처 정책(SOP)을 가진다.도메인·포트·프로토콜이 다르면 스크립트 요청을 막는다. CORS는 브라우저가 ‘다른 출처’로 요청할 때, 서버가 명시적으로 허용했는지 헤더로 확인하는 안전장치이다.서버가 응답 헤더를 통해 허용 범위를 명시해 줌으로써, 다른 출처의 요청을 허용하는 방식이다. 서버 대 서버 통신에는 해당되지 않고, 오직 브라우저 환경에서만 발생하는 제약이다.3. 컨테이너가 뭔가요?컨테이너는 OS 커널을 공유하면서 격리된 실행 환경을 제공한다.이미지..
[Java] 스레드가 뭐야
·
STUDY/CS | Algorithm
1. 스레드란?스레드는 프로세스 내에서 실행되는 가장 작은 실행 단위이다.한 프로세스 안에 여러 스레드를 생성하여 동시에 작업을 수행할 수 있고, 이걸 멀티스레딩이라 한다.2. 스레드 생성자바에서 스레드를 생성하는 대표적인 방법은 두 가지다.(1) Thread 클래스 상속class MyThread extends Thread { @Override public void run() { // 작업 내용 }}public class ThreadExample { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); // run()이 아닌 start() 호출 }} `r..
[Java] 제네릭이 뭐야
·
STUDY/CS | Algorithm
1. 제네릭이란?제네릭은 클래스나 메서드에서 사용할 데이터 타입을 작성 시점에 정하지 않고, 나중에 사용할 때 정하는 것이다. 제네릭은 왜 사용하는 걸까?(1) 타입 안정성`Object`를 사용하면 모든 타입을 담을 수 있다.하지만 꺼낼 때도 `Object` 타입으로 반환되기 때문에 캐스팅이 필요하고, 잘못된 타입이 들어왔을 경우 런타임 오류가 발생한다.List list = new ArrayList();list.add("hello");list.add(123);String s = (String) list.get(1); // 실행 시 ClassCastException 제네릭을 사용하면 컴파일러가 타입을 미리 검증해주므로, 캐스팅이 불필요하고 런타임 오류를 예방할 수 있다.List list = new Arra..
[Java] 가비지 컬렉션이 뭐야
·
STUDY/CS | Algorithm
오늘은 GC에 대해 알아보겠다.(추후 수정을 통해 보완 예정)JVM과 Heap 영역Java는 JVM(Java Virtual Machine) 위에서 동작한다.JVM은 크게Method 영역Stack 영역Heap 영역PC Register 영역Native Method Stack 영역으로 메모리를 나누어 관리한다.그중 Heap 영역은 `new` 키워드로 생성되는 객체가 올라가는 공간이다. 참조하던 객체가 더 이상 필요 없어졌을 때 이 메모리는 어떻게 될까?C/C++에서는 개발자가 `free()`를 호출해야 하지만, Java에서는 가비지 컬렉션(Garbage Collection, GC) 이 자동으로 불필요한 객체를 제거한다.가비지 컬렉션의 정의Garbage Collection(GC)은 JVM의 Heap 영역에서 더..