분류 전체보기
-
백준 16564번: 히오스 프로게이머 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 19. 21:35
https://www.acmicpc.net/problem/16564 16564번: 히오스 프로게이머 첫째 줄에는 캐릭터의 개수 N, 올릴 수 있는 레벨 총합 K가 주어진다. (1 ≤ N ≤1,000,000, 1 ≤ K ≤ 1,000,000,000) 다음 N개의 줄에는 현재 각 캐릭터의 레벨이 X1, X2, X3, ... , Xn 으로 주어진다. (1 ≤ X www.acmicpc.net 접근 이분 탐색 문제를 풀 때 제일 먼저 찾아야 하는 조건은 최솟값과 최댓값이다. 이분 탐색은 특정 정렬 혹은 범위를 반씩 나눠가며 탐색하는 알고리즘이다. 때문에 범위를 특정할 수 있는 최솟값과 최댓값을 구하는 것이 필수적이다. 예시를 통해 살펴보자. 여기서 구할 수 있는 최솟값은 당연하게도 가장 낮은 레벨인 10이다. 그..
-
너비 우선 탐색 (Breadth-First Search, BFS)Algorithm/Algorithm Categories 2022. 1. 18. 08:34
기본 개념 '너비 우선 탐색'이란 그래프(혹은 트리와 같은 자료구조)를 탐색하는 방법 중 하나로, 자신이 탐색할 수 있는 가장 가까운 곳을 우선적으로 탐색하는 알고리즘이다. 다시 말해, 루트 노드에서부터 시작해 인접한 자식 노드들을 한 번씩 탐색하고 이를 반복해 탐색을 수행하는 알고리즘이다. 자신과 가까운 모든 경로를 탐색하고 그다음 거리의 경로를 탐색한다. 때문에 모든 경로를 탐색해야 하는 경우 '깊이 우선 탐색'보다 빠르게 수행할 수 있다는 장점이 있다. 예시 3*3, 총 9칸의 보드가 있고 이 보드를 탐색한다고 해보자. (움직일 수 있는 방향은 상하좌우 네 방향뿐이며 현재 내 위치는 A이다.) 너비 우선 탐색에서는 Queue를 이용해 탐색하는 방식을 주로 사용한다. Queue를 만들어주고 내 위치를..
-
백준 13164번: 행복 유치원 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 17. 08:46
https://www.acmicpc.net/problem/13164 13164번: 행복 유치원 행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로 www.acmicpc.net 접근 우선 근처에 있는 원생들의 키 차이를 알아야 한다. 그래야 어떻게 원생 그룹을 나눴을 때, 가장 많은 차이가 나는지 알 수 있기 때문이다. 바로 옆 원생들끼리의 차이를 구해 따로 리스트를 만든다. 이제 해당 리스트들을 오름차순으로 정렬한다. 이때 이 정렬을 기준으로 원생들의 키를 나눌 수 있다. 가장 차이가 많이 나는 원생들을 기준으로 나누는 건 피하고 나머지 원생들을 기준으로 더해준다..
-
백준 12904번: A와 B (Python/Java)Algorithm/Algorithm Problem 2022. 1. 16. 22:47
https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 접근 문제 조건을 잘 살펴보면 어렵지 않게 그 힌트를 얻을 수 있다. 한번 연산이 수행될 때마다 글자 맨 뒤에 A가 되었건, B가 되었건 글자가 붙는다. 이 얘기는 한번 연산이 수행될 때마다 무조건 글자 수가 늘어난다는 것이다. 그리고 한번 연산을 할 때마다 뒤에 A 혹은 B가 붙기 때문에 바로 직전에 어떤 연산을 통해 해당 글자가 출력되었는지 확인할 수 있다..
-
OSI 7계층이란?Computer Science/Network 2022. 1. 15. 18:53
OSI 7계층이란? OSI 7계층(Open Systems Interconnection Reference Model 7 Layer)은 국제표준화기구(ISO)가 역할에 따라 네트워크 구성요소를 7개 계층으로 나눈 표준모델이다. 네트워크 통신 역사 초창기에는 프로토콜이 통일화되어있지 않았기 때문에 통신이 호환되지 않는 문제가 있었고, 이를 해결하기 위해 나온 모델이다. 계층을 나눈다는 뜻은 각 계층을 독립적으로 만든다는 뜻이다. 즉, 한 계층이 다른 계층에 영향을 주지 않는다. 그렇기 때문에 어떤 문제가 발생했을 때, 다른 부분을 건들이거나 해매지 않고 문제를 발견하고 해결할 수 있게 된다. 이는 곧 유지 및 관리 효율의 상승으로 이어진다. OSI 7계층은 각 계층별 역할을 통해 통신 규격(프로토콜)을 만족하..
-
백준 3055번: 탈출 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 15. 17:11
https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 접근 문제 설정이나 출력 예시만 조금 다를 뿐, 백준 5427번 불(https://www.acmicpc.net/problem/5427)과 아예 똑같은 문제다. 백준 5427번 풀이를 작성한 적이 있으니(https://codestation.tistory.com/14) 참고하면 될 것이다. 풀이 Python from collections import deque upDown = [-1, 1, 0, 0] leftRi..
-
백준 16206번: 롤케이크 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 14. 23:23
https://www.acmicpc.net/problem/16206 16206번: 롤케이크 오늘은 재현이의 생일이다. 재현이는 친구 N명에게 롤케이크를 1개씩 선물로 받았다. 롤케이크의 길이는 A1, A2, ..., AN이다. 재현이는 길이가 10인 롤케이크만 먹는다. 따라서, 롤케이크를 잘라서 www.acmicpc.net 접근 최소 칼질 횟수로 길이가 10인 롤케이크를 최대한 많이 만들기 위해선 10으로 나누어 떨어지는 롤케이크를 잘라야 한다. 예를 들어 확인해보자. 길이가 30인 롤케이크와 35인 롤케이크가 있다고 하자. 길이가 30인 롤케이크는 10 / 10 / 10 두 번의 칼질을 통해 길이 10 롤케이크를 세 개 만들 수 있다. 반면 35인 롤케이크는 10 / 10 / 10 / 5 이렇게 세 번..
-
백준 14499번: 주사위 굴리기 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 13. 22:21
https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 접근 굳이 다른 알고리즘을 쓰지 않더라도 풀 수 있는 구현 문제로, 조건에 맞춰 코드만 잘 작성하면 된다. 나 같은 경우는 주사위를 굴리고 또 아래, 위를 찾는 것이 조금 귀찮고, 머릿속에서 바로 그려지지 않았다. 때문에 그냥 따로 코드를 짜서 움직이는 방향과 주사위 상태만 넣으면 굴러간 주사위를 만들어주게끔 만들었다. 덕분에 위는..