BFS 그래프의 표현 방식: List<ArrayList<Integer>>, List<int[]>
·
Engineering Notes/CS & Algorithms
보호되어 있는 글입니다.
컴퓨터의 연산 방식 (feat. 1의 보수 & 2의 보수)
·
Engineering Notes/CS & Algorithms
들어가기에 앞서,컴파일이란 무엇인가? C, C++, Java, Python 같이 우리가 일반적으로 사용하는 프로그래밍 언어를 고급 언어라고 하며, 기계어와 어셈블리어를 저급 언어라고 한다. 가장 쉬운 구분법은 해당 언어가 인간친화적인지 기계친화적인지를 따지는 것이다. 인간친화적인 고급 언어는 우리가 읽고 쓰기 편하지만 이를 그대로 전달한다면 컴퓨터는 이해할 수 없다. 이유를 간단히 설명하자면, 컴퓨터는 전기 신호를 바탕으로 이해하는데 이를 `있다(1)`와 `없다(0)` 정도로만 구분하기 때문이다. CPU가 직접 해석하고 실행할 수 있도록, 사람이 작성한 고급 언어인 `코드`를 `기계어`로 번역하는 것을 `컴파일`이라고 한다.소스 코드를 실행 가능한 파일로 만드는 전체 과정을 `빌드`라고 하며, 컴파..
최적화 문제를 위한 DP (탑다운, 바텀업 방식)
·
Engineering Notes/CS & Algorithms
다이나믹 프로그래밍은 시간 단축을 위한 알고리즘이다. 탑다운 방식과 바텀업 방식이 존재하며, 결국 핵심은 계산한 값을 저장하고 재활용한다는 것이다.동적 계획법(DP)를 구현해 보자. 탑다운: 메모이제이션 이름에서 알 수 있듯 큰 문제부터 작은 문제로 해결하는 방식이다. ✅ 재귀구조가 직관적이고 구현이 간단하다. ✅ 재귀호출이 깊어질수록 스택 오버플로우 가능성이 있다.public class Fibonacci { static int[] dp; public static int fibonacci(int n) { if (n 바텀업: 터뷸레이션 이름에서 알 수 있듯 작은 문제부터 큰 문제로 해결하는 방식이다. ✅ 스택 오버플로우 위험이 없으며 모든 값에 쉽게 접근할 수 있다.✅ 반복문을 ..
그래프 탐색 알고리즘 BFS 풀이
·
Engineering Notes/CS & Algorithms
인사말 모두들 안녕하신가요. 저는 어느덧 알고리즘을 건든 지 140일 지났답니다. 기쁜 소식이 있어 전해드리자면, 최근에 BFS 문제들을 풀며 골드 구간에 진입했어요. 목표는 골랜디 마스터고요. 이번에 문제를 풀며 스스로 아쉬웠던 부분들이 있어서 지금의 생각과 감정을 기록하려고 글을 적습니다.BFS인데 그래프가 2개?package bfs;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;public class Problem10026 { static final int[] dx = {0, 0, -1,..
[Java] BOJ 11866: 요세푸스 문제, 큐
·
Engineering Notes/CS & Algorithms
// https://www.acmicpc.net/problem/11866import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Problem11866 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); Queue q = new LinkedList(); for (int i = 1; i 1) { for (int i = 1; i "); }}▶ 문제..
[Java] BOJ 4134: 에라토스테네스의 체
·
Engineering Notes/CS & Algorithms
소수 검증static boolean isPrimeNumber(int n) { if (n ▶ 특정 숫자가 소수인지를 판단할 때, 우리는 해당 숫자의 제곱근까지만 약수 여부를 검증하면 된다. 그런데 만약, 범위 내의 소수를 모두 알고 싶다면 어떻게 해야 할까?범위 내 소수 검증public static void main(String[] args) { Scanner sc = new Scanner(System.in); int start = sc.nextInt(); int end = sc.nextInt(); for (int i = start; i ▶ 앞서 제시한 메서드를 사용하면, 당연히 반복문을 통해 범위 내 소수를 나열할 수 있다. 하지만 입력된 범위가 커지면 커질수록 더 많은..
[Java] BOJ 10814: 나이순 정렬, 2차원 배열
·
Engineering Notes/CS & Algorithms
2차원 배열import java.util.*;public class Problem10814 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); String[][] infos = new String[N][2]; for (int i = 0; i () { public int compare(String[] o1, String[] o2) { return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]); } });..
[Java] BOJ 11650: 람다 표현식, 정렬 조건 부여하기
·
Engineering Notes/CS & Algorithms
import java.io.*;import java.util.Arrays;import java.util.StringTokenizer;public class Problem11650 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[][] coordinates = new int[N][2]; // [x, y] N개 StringTokenizer st; for (int i = ..