전체 글399 [컴퓨터 네트워크] 인터넷과 프로토콜 인터넷(Internet) Internet은 Inter-Connected Network of Networks의 약자이며, 네트워크들을 상호 연결한 네트워크이다. 인터넷을 구성하는 내부의 네트워크를 subnet이라고 한다. 이러한 subnet들을 상호 연결한 것이 인터넷이다. 즉, 인터넷도 한 개의 네트워크이다. 네트워크(Network) 다양한 유형의 호스트와 스위치들을 통신 링크로 연결한 분산 시스템 즉, 네트워크는 크게 호스트와 스위치로 구성되어 있다. 호스트(Host) 인터넷의 끝에 연결되는 종단 장치(End-System)이다. ex) PC, 서버, 스마트폰, Iot 센서 등등 (통신) 링크(Link) 통신 장치들 간에 정보 전달 단위인 패킷(packet)을 전달하는 유, 무선 매체(Media) ex).. Computer Network 2022. 9. 3. [백준/BOJ] 1507번: 궁금한 민호 문제 https://www.acmicpc.net/problem/1507 1507번: 궁금한 민호 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 각각의 도시 사이에 이동하는데 필요한 시간이 주어진다. A에서 B로 가는 시간과 B에서 A로 가는 시간은 같다. 또, A와 B www.acmicpc.net 해설 플로이드 와샬 알고리즘을 역으로 이용하여 문제를 해결할 수 있다. 플로이드 와샬 알고리즘을 생각해보자. 만약 1번 도로, 2번 도로, 3번 도로가 있을 때, 1 - 2, 2 -3번 간 도로가 있다면 1 - 3번 도로는 없어도 1 - 2 -3을 통해 갈 수 있다. 즉 map[1][3] == map[1][2] + map[2][3]이 되는 것이다. 따라서 이 문제에서는 m.. PS(Problem Solving)/BOJ 2022. 9. 3. [백준/BOJ] 16197번: 두 동전 문제 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 해설 두 동전 중 하나만 보드에서 떨어트리기까지 최소 몇번을 움직여야 하는지 구해야하는 문제이다. bfs를 이용하여 문제를 해결할 수 있다. bfs를 수행할 때 방문여부를 체크하는데, 이 문제에서는 동전이 2개이며 각각의 (y, x)좌표를 갖고 있으므로 4차원 배열을 이용하여 방문여부배열을 선언해야 한다. 즉, 다음과 같이 선언된다. visited[row][col][row][col] 입력을.. PS(Problem Solving)/BOJ 2022. 9. 2. [백준/BOJ] 1719번: 택배 문제 https://www.acmicpc.net/problem/1719 1719번: 택배 첫째 줄에 두 수 n과 m이 빈 칸을 사이에 두고 순서대로 주어진다. n은 집하장의 개수로 200이하의 자연수, m은 집하장간 경로의 개수로 10000이하의 자연수이다. 이어서 한 줄에 하나씩 집하장간 경 www.acmicpc.net 해설 플로이드 와샬 알고리즘을 응용하여 문제를 해결할 수 있다. 플로이드 와샬을 진행하므로 자기 자신으로 향하는 노드는 0으로, 그 외에는 INF(임의로 지정)으로 초기화해준다. 이후 간선의 정보를 입력받아 어떠한 노드에서 어떠한 노드로 향할 때 얼마의 비용이 드는지를 저장해주고, a->b와 같이 한 번에 갈 수 있는 노드들은 경로를 저장해 줄 배열 path[a][b] = b와 같이 된.. PS(Problem Solving)/BOJ 2022. 9. 1. [백준/BOJ] 1185번: 유럽여행 문제 https://www.acmicpc.net/problem/1185 1185번: 유럽여행 첫 줄에는 방문할 나라의 수 N(5 ≤ N ≤ 10,000)과 이 나라들 사이를 연결하는 길의 수 P(N-1 ≤ P ≤ 100,000)가 주어진다. 두 번째 줄에는 N+1번째 줄까지 i+1번째 줄에는 i번째 나라를 방문할 때 드는 비 www.acmicpc.net 해설 N-1개의 길만을 남겨야 한다. 모든 도시를 최소 한번 이상 방문하면서 최소 비용이 드는 방법을 찾고 있다. 첫 시작 나라는 민식이가 정할 수 있고, 마지막 나라는 시작 나라이어야 한다. 위 3 문장은 문제에서 가장 핵심이 된다 생각한 것들이다. 우선 1, 2번을 보면 최소 신장 트리를 구해야 한다는 것을 알 수 있다. 이때, 문제에서는 각 나라에 .. PS(Problem Solving)/BOJ 2022. 8. 31. [백준/BOJ] 1613번: 역사 문제 https://www.acmicpc.net/problem/1613 1613번: 역사 첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. www.acmicpc.net 해설 n개의 사건들의 전후 관계가 주어진다. 이를 통해 두 개의 사건의 전후 관계를 알아낼 수 있는지, 안다면 먼저 일어났는지, 후에 일어났는지를 알아내면 된다. 플로이드 와샬 알고리즘을 이용하면 모든 사건들의 전후 관계를 한번의 알고리즘 수행으로 알아낼 수 있다. 전후 관계를 표시할 배열들을 초기값(INF = 987654321이라 하자.)으로 선언해준다. 이때 같은 사건(i == j.. PS(Problem Solving)/BOJ 2022. 8. 30. [백준/BOJ] 14938번: 서강그라운드 문제 https://www.acmicpc.net/problem/14938 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 해설 어떠한 지역에 떨어졌을 때, 수색 범위 안에서 가장 많은 아이템을 얻을 수 있는지를 구하는 문제이다. 우선 모든 지역에서의 범위를 구해야 하기 때문에 1번 지역에 떨어졌을 때 모든 지역까지의 거리를 구해야 하고, 2번 지역에 떨여졌을 때 모든 지역까지의 거리, 3번, 4번 . . . n번에 떨어졌을 때의 모든 지역까지의 거리를 구해야 한다. 모든 지역까지의 거리를 구하는 알고리즘으로 다익스트.. PS(Problem Solving)/BOJ 2022. 8. 29. [백준/BOJ] 16928번: 뱀과 사다리 게임 문제 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 해설 총 100개의 칸으로 이루어진 보드판에서 주사위를 굴려 100번째 칸에 도달할 수 있는 최소 횟수를 구하는 문제이다. 문제의 조건으로 100번 칸을 넘어가면 이동할 수 없으므로, 딱 100번째 칸에 도달했을 때의 값을 구해야 한다. 우선 뱀과 사다리 각각 어떠한 칸에 놓여 어떠한 칸으로 입력되는지를 저장해놓기 위해 두 개의 Map을 선언하였.. PS(Problem Solving)/BOJ 2022. 8. 28. [Android] PendingIntent란? PendingIntent PendingInten는 Pending과 Intent를 합쳐놓은 단어이다. Intent란 무엇인가? 컴포넌트 간의 작업 수행을 위한 정보를 전달하는 역할을 맡고 있다. 이제 Pending에 대해 알아보자. Pending을 직역해보자면 다음과 같다. "보류", "임박한"의 뜻을 가지고 있다. 이제 Pending과 Intent를 합친 PendingIntent에 대해 유추해볼 수 있다. PendingIntent는 Intent(정보 전달)을 바로 실행하는 것이 아닌, 특정 시점에 수행하도록 하는 역할을 하는 것이고, 기본 목적은 다른 애플리케이션의 권한을 허용하여 가지고 있는 Intent를 본인 앱의 프로세스에서 실행하는 것처럼 사용하게 하는 것이다. 예를 들어 Notification으.. Android 2022. 8. 26. [백준/BOJ] 1660번: 말이 되고픈 원숭이 문제 https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 해설 출발점에서 도착점까지 움직일 때, 최소로 움직일 수 있는 값을 출력하는 문제로 BFS를 사용하여 문제를 풀 수 있었다. 원숭이는 상하좌우로 움직일 수 있고, k번 이하로 말처럼 움직일 수 있다고 한다. 나는 이를 말이 움직일 수 있는 좌표와 원숭이가 움직일 수 있는 좌표로 각각 저장해주었다. private val monkeyX = intArrayOf(1, -1, 0, 0.. PS(Problem Solving)/BOJ 2022. 8. 26. [백준/BOJ] 17472번: 다리 만들기2 문제 https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 해설 문제를 읽어보면, 크게 3가지 과정을 나눠야하는 것을 알 수 있다. 섬을 구분짓는다. 섬을 잇는 다리를 놓는다. 모든 섬이 연결되었는지 확인 및 다리의 총 길이를 구한다. 단계별로 나가보자. 우선 섬을 구분지어야 한다. 나는 우선 섬으로 표시된 1을 전부 -1로 저장해주었다. 이후 BFS를 사용하여 섬에 번호(1, 2, 3, 4, . . .)를 붙여주었다. repe.. PS(Problem Solving)/BOJ 2022. 8. 25. [Android] TabLayout(탭 레이아웃) 구현 TabLayout 전에 Bottom Navigation에 대해 공부했던 적이 있다. Bottom Navigation은 말 그대로 하단 바였다. 이는 TabLayout의 일종으로 볼 수 있다. Bottom Navigation처럼 여러 개의 버튼이 있고, 각 버튼마다의 Activity 또는 Fragment를 보여준다. 구현 방법에 대해 알아보자. 1. XML 작성 xml의 Design에 가보면 Containers에 TabLayout이 있는 것을 확인할 수 있다. 이 TabLayout을 Activity에 넣으면, 자동적으로 3개의 아이템이 설정된다. 더 추가를 하고 싶다면 추가를 하면 되며, 각 버튼마다의 속성을 설정해준다. 2. 각 버튼에 따른 이벤트 설정 xml의 작성이 끝났다면 MainActivity에서.. Android 2022. 8. 24. [백준/BOJ] 10159번: 저울 문제 https://www.acmicpc.net/problem/10159 10159번: 저울 첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩 www.acmicpc.net 해설 전형적인 플로이드 와샬 알고리즘 문제이다. 플로이드 와샬 알고리즘을 사용하는 문제이므로 우선 물건의 개수만큼의 이중 배열을 선언한다. 나는 이 배열을 boolean 배열로 하였지만, 다른 배열로 하여도 설정만 잘하면 크게 상관없다. 물건 쌍의 개수를 입력받으면, 배열에서의 그 인덱스를 true로 한다. 이는 양방향이 아닌 1 > 2처럼 단방향이므로 한쪽으로만 정.. PS(Problem Solving)/BOJ 2022. 8. 24. [Android] ViewPager2 사용법 ViewPager란? 애플리케이션을 사용하다보면 위와 같이 페이지를 양옆으로 넘길 수 있는 스와이프 기능을 종종 볼 수 있다. 이를 ViewPager(뷰 페이저)라고 한다. 원래 ViewPager가 있었지만 단점이 있어, 이를 보완하기 위해 ViewPager2가 등장하였다. ViewPager2는 RecyclerView 기반으로 만들어진 컴포넌트이고, 사용법도 RecyclerView와 유사하다. RecyclerView와의 차이점은 RecyclerView는 페이지를 어느 정도 넘기면 그 위치에서 정지하지만, ViewPager2는 일정 이상 페이지를 넘기면 자동으로 페이지가 넘어가진다. 위를 보면 RecyclerView는 스크롤을 멈치면 그 자리에서 멈치지만, ViewPager2는 일정 페이지를 넘긴 후 손을.. Android 2022. 8. 23. [백준/BOJ] 2636번: 치즈 문제 https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 해설 판의 가장자리에는 치즈가 놓여있지 않다고 문제에 나와있다. 즉, (0, 0)의 위치 또는 각 판의 가장자리 어디서든 bfs 혹은 dfs를 이용하여 탐색을 해나가면 안에 공기에 접해있는 치즈만을 녹일 수 있다. 치즈가 전부 녹을 때까지 bfs를 수행해줘야 한다. 따라서 bfs를 한 번만 수행하는 것이 아닌, 모든 치즈가 사라질 때까지 반복을 해야 한다. 이를 알기 위해 bfs를 수행하는 과정에서 1(치즈)이.. PS(Problem Solving)/BOJ 2022. 8. 23. [백준/BOJ] 2493번: 탑 문제 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 해설 탑이 n개 있고, 이 탑들은 좌측으로 신호를 보낸다. 좌측에 현재 탑보다 더 높은 탑이 있다면 신호를 받을 수 있고, 더 높은 탑이 없다면 신호를 받을 탑이 존재하지 않는다는 의미이다. 문제의 예시를 보며 차근차근 알아가보자. 맨 처음 탑은 좌측에 아무 것도 없기 때문에, 신호를 받는 탑이 없다. 즉 0을 출력한다. 이제 이 탑을 스택에 넣어줄 것이다. 높이가 9인 2번 탑에서 신호를.. PS(Problem Solving)/BOJ 2022. 8. 22. [Android] Bottom Navigation 사용하기 Bottom Navigation이란? 이름만 봐도 대충 감이 잡힐 것이다. 인스타, 카카오톡, 유튜브, 넷플릭스 등 다양한 곳에서 볼 수 있는 "하단에 있는 바"이다. 탭의 갯수는 3개 이하는 권장하지 않고, 5개를 초과할 수 없다. 또한 각 탭의 텍스트들은 너무 길어선 안되며, 크기를 기본 값보다 작게 하면 안된다. 단계 별로 사용법을 알아보자. 1. 탭 아이콘 추가 각 탭에 사용할 아이콘들을 drawable에 추가한다. 나는 간단한 예시를 들 것이기에 탭 3개를 기준으로 할 것이다. 무료 아이콘 사이트가 많으니 원하는 아이콘을 찾아보도록 하자. 2. 메뉴 resource 파일 생성 res -> New -> Android Resource File에서 menu 파일을 만든다. 이때 Resource typ.. Android 2022. 8. 21. [백준/BOJ] 1082번: 해킹 문제 https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 해설 한 컴퓨터가 해킹당했고, 이 컴퓨터에 의존하는 컴퓨터들은 시간이 지남에 따라 전염되기 시작한다. 즉, 한 개의 루트 노드로부터 연결된 노드들이 전부 감염된다는 것이다. 이를 풀기 위해 다익스트라 알고리즘을 응용하였다. 다익스트라 알고리즘은 최단 경로를 찾는 알고리즘으로 PriorityQueue를 이용하여 수행해나간다. 하지만 이 문제에서 a, b는 두 번 이상 주어지지 않는다. 즉, 최단 .. PS(Problem Solving)/BOJ 2022. 8. 21. [Android] RecyclerView(리사이클러뷰) RecyclerView란? 스마트폰을 사용하다 보면, 여러 가지 항목들이 나열돼있는 목록 화면들을 볼 수 있다. 이러한 목록 화면을 만들 때 사용하는 것이 RecyclerView이다. RecyclerView를 정의해보자면, 사용자가 관리하는 데이터 집합을 각각의 아이템 단위로 구성하며 대량의 데이터 목록을 동적으로 표현해주는 뷰이다. Recycler를 해석해보면 재사용이듯이, RecyclerView는 재사용성이 좋다. RecyclerView의 구성 요소 RecyclerView를 이용하여 목록을 만들 때, RecyclerView 클래스만으로는 화면에 아무것도 출력되지 않는다. 다음과 같은 구성 요소를 이용해야만 원하는 목록을 만들 수 있다. ViewHolder : 항목에 필요한 뷰 객체를 갖는다. Adap.. Android 2022. 8. 20. [백준/BOJ] 1967번: 트리의 지름 문제 https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 해설 한 정점에서 가장 멀리 있는 정점은 원의 지름 즉, 테두리에 해당되는 정점이다. 따라서 한 정점에서 가장 멀리 있는 정점을 구한 후, 그 정점에서 가장 멀리 있는 정점까지의 길이가 곧 원의 지름이 된다. 우선 가장 멀리 있는 한개의 정점을 구해야 한다. 이때 어떠한 정점에서 출발을 하든지 간에 가장 멀리 있는 정점은 지름에 해당하는 정점 중 하나이다. 지름에 해당하는.. PS(Problem Solving)/BOJ 2022. 8. 20. 이전 1 ··· 3 4 5 6 7 8 9 ··· 20 다음 728x90