반응형

전체 글 314

[백준]JAVA - 1034번: 램프

https://www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져 www.acmicpc.net 풀이 문제를 읽은 직후에 이해가 잘 되지 않았다. 문제 내용은 아래와 같다. 1. 가로 x 세로 크기의 map에 램프가 있다. 2. 각 열의 맨 아래에 해당 열의 램프를 단 번에 키고 끌 수 있는 스위치가 존재한다. 3. 마지막 입력에 스위치를 누를 수 있는 횟수 K가 주어진다. 스위치를 K번 눌러서 각 행의 모든 램프가 켜진 행을 최대한 많이 만들면 된다. 예제 1번을 보면서 문제를 풀어..

알고리즘 시간복잡도 정의 및 기본 개념 파악하기

대학교 교과 과정에서 들어봤을 법한 시간 복잡도는 대체 무엇일까? 필자도 최근에 알고리즘 문제를 많이 접하면서 다양한 알고리즘 구현 방법에 대해서 알아가고있다. 알고리즘 문제를 해결할 때의 핵심이 바로 시간 복잡도다. 시간 복잡도란 입력값의 변화에 따라 연산을 실행할 때 걸리는 시간을 말하는 것으로 시간 복잡도가 낮을 수록 효율적인 알고리즘이라고 할 수 있다. 시간 복잡도 표기법 Big-O (빅-오) : 최악 Big-Ω (빅-오메가) : 최고 Big-θ (빅-세타) : 평균 시간 복잡도를 표기하는 방법에는 위와 같이 총 3가지가 있다. 빅-오 표기법은 최악의 경우를 고려한다. 즉, 프로그램이 실행되는 과정에서 소요되는 최악의 시간을 생각한다. 어떠한 프로그램이든 최악의 사태를 미리 방지하고 고려해야하기 ..

알고리즘/이론 2022.11.10

[백준]JAVA - 2206번: 벽 부수고 이동하기

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 풀이 기본적인 bfs 에 간단한 조건만 추가하면 해결 할 수 있는 문제이다. 시작점 (0, 0) 에서 도착점 (N, M) 으로 갈 수 있는 최단 거리를 구하면 된다. Position 클래스를 생성할 때 x 좌표, y 좌표, 거리, 벽을 부셨는지 여부를 함께 저장할 수 있도록 선언한다. public static class Position { int x; // x 좌표 int..

자바 정적 (Static) 메서드 정의 및 생성, 사용 예시

정적 (Static) 메서드 정의 Java에서는 Static 변수와 메서드를 만들 수 있는데, 이를 정적 필드와 정적 메서드라고 부르며 이 둘을 합쳐서 정적 멤버(클래스 멤버)라고 합니다. 정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이므로 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리합니다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다. [장점] 1. static 키워드를 붙이면 메모리 할당을 딱 한 번만 하게 되어 메모리 사용에 이점을 볼 수 있음. 그렇기에 항상 값이 변하지 않는 경우라면 static 키워드를 사용하는 것이 좋음 2. static으로 설정하면 같은 곳의 메모리 주소만을 바라보기 때문에 stat..

[백준]JAVA - 1197번: 최소 스패닝 트리

https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 풀이 위 문제는 최소 스패닝 트리 문제로 해결 방법은 프림, 크루스칼 두 가지가 존재한다. 필자는 두 가지 방법에 대해서 잘 모르는 상태였고, 해당 알고리즘 해결법을 먼저 숙지한 다음에 다시 문제에 접근했다. 우선, 크루스칼을 이용해서 문제를 해결했으며 해당 내용을 모른다면 아래를 참고하는 걸 추천한다. 자바 최소 비용 신장 트리(MST), 크루스칼 ..

[백준]JAVA - 1937번: 욕심쟁이 판다

https://www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net 풀이 위 문제는 dfs와 bfs를 이용해서 풀 수 있는 것처럼 보이지만 dp를 이용하지않으면 시간초과가 발생한다. 메모제이션, 즉 dp를 이용해서 실행시간을 단축시켜야한다. 출발지가 정확하게 명시되어 있지 않은 문제이기 때문에 bfs를 이용해야하고, 메모제이션을 이용해서 해당 과정에서의 시간을 단축시키면 된다. 우선 2차원 배열을 생성하고 임의의 출발지에서 상하좌우로 움직이면서 최대한 ..

[백준]JAVA - 10814번: 나이순 정렬

https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 단순한 정렬 문제로 여러 가지 방법으로 해결할 수 있다. 필자는 배열을 이용하지않고 클래스 객체를 만들어서 해결했다. public static class Person implements Comparable { int age; String name; public Person (int age, String name) { this.age = age; this.name = name; } public in..

알고리즘/정렬 2022.11.05

윈도우10 데스크탑 PC에서 블루투스 장치 페어링 (연결) 하는 방법

안녕하세요. 두부입니다. 이번에 키크론 K8 pro 키보드를 선물받고 데스크탑 PC에서 블루투스 기능으로 사용해보려하는데 도저히 연결이 안되더라구요. 이유는 제 메인보드에서 블루투스 기능을 지원하지않기 때문인데요. 그렇다면 연결하는 방법이 없을까요? 아닙니다!! 집 앞에서 흔하게 볼 수 있는 다이소에서 쉽게 구매할 수 있는 '동글'이를 구매하시면 되는데요. 다이소에서 5,000원에 구매하실 수 있습니다. Bluetooth 연결 방법 동글이를 구매하셨다면 어떻게 사용하는지가 궁금하실텐데요. 방법은 매우 간단합니다. 1. '동글'이를 본체 usb 포트에 꽂는다. 2. [시작] - 톱니바퀴 아이콘을 클릭해서 설정으로 들어와서 장치를 클릭한다. 3. Bluetooth 또는 기타 장치 추가를 클릭한다. 동글이를 ..

IT 정보/Windows 2022.11.04

[백준]JAVA - 16234번: 인구 이동

https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 풀이 인접해있는 땅과의 인구수 차이가 L과 R 사이이면 국경선이 열리고 연합 내의 동일한 인구수를 가진다. 위 문제는 bfs, dfs 아무거나 사용해도 무관하기 때문에 본인이 원하는 걸 사용하면 된다. 필자는 bfs를 이용해서 문제를 풀었다. while (true) { visited = new boolean[N][N]; // 방문 유부 isMove = false; // 변경 유무 f..

[백준]JAVA - 1753번: 최단 경로

https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net 풀이 전형적인 다익스트라 알고리즘 문제이다. dp와 bfs를 이용해서 한 노드에서 모든 노드로 가는 최단거리를 구할 수 있다. 다익스트라에 대해서 잘 모르면 아래 링크를 먼저 보는 걸 추천한다. 자바 다익스트라(Dijkstra) 알고리즘 정의 및 작동 원리 다익스트라 알고리즘 (Dijkstra) 정의 음의 가중치가 없는 그래프의 한 노드에서 각 모든 노드까지의..

반응형