[백준/2667번] 단지번호 붙이기 (실버 🥈1)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/2667과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오.`입력`첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0..
[백준/14940번] 쉬운 최단거리 (실버 🥈 1)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/14940지도가 주어지면 모든 지점에 대해서 목표지점까지의 거리를 구하여라.문제를 쉽게 만들기 위해 오직 가로와 세로로만 움직일 수 있다고 하자.지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000).다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이다. 입력에서 2는 단 한개이다.사고 정리 n의 최대값이 엄청 크진 않으니까, 인접리스트가 아니라 2차원 matrix로 표현해서 진행하면 편할듯?BFS로 접근해야겠다고 생각했는데, 기본적으로 목표로하는 지점이 정확히 존재하는데 이걸 어떻게 해야하지.. ?싶었..
[백준/1325번] 효율적인 해킹 (실버 🥈1)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/1325 해커 김지민은 잘 알려진 어느 회사를 해킹하려고 한다. 이 회사는 N개의 컴퓨터로 이루어져 있다.김지민은 귀찮기 때문에, 한 번의 해킹으로 여러 개의 컴퓨터를 해킹 할 수 있는 컴퓨터를 해킹하려고 한다.이 회사의 컴퓨터는 신뢰하는 관계와, 신뢰하지 않는 관계로 이루어져 있는데, A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다는 소리다.이 회사의 컴퓨터의 신뢰하는 관계가 주어졌을 때, 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 출력하는 프로그램을 작성하시오. 첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다.둘째..
[백준/11725번] 트리의 부모찾기 (실버 🥈2)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/11725 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.사고 정리 문제 조건에 의하면, 노드와 노드간의 연결 관계들만 제공되며 어떤 노드가 루트인지는 정보가 없음. 그러나 문제의 마지막에 트리의 루트를 1이라고 가정하기 때문에 각 노드의 부모들이 정해짐.메모리를 절약하기 위해 개인적으로 나에게 익숙한 인접 행렬보다는 인접 리스트 접근으로 진행! 문제에서 1번 노드가 루트로 지정이 되었으니 인접리스트를 구축해서 하나씩 확인하는 방식으로 진행하면 된다!! - 1번 노드와 연결된 것은 6번과 4번!! 즉, 4번과 6번의 부모는 1번 노드이다. -..
[백준/2606번] 바이러스 (실버🥈 3)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/2606신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다.한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정..
[이코테/DFS와BFS] 미로 탈출
·
코딩테스트/이코테
문제 요약동빈이는 N X M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1,1)이고 미로의 출구는 (N,M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다. `입력 조건`첫재 줄에 두 정수 N, M (4 또한, 시작 칸과 마지막 칸은 항상 1이다. 사고 정리우선, BFS로 풀이하면 되는 문제이다. 시작점과 끝점이 동일하다는 점을 생각하면 문제의 풀이 방향이 좀 보인다...
[이코테/DFS와BFS] 음료수 얼려 먹기
·
코딩테스트/이코테
문제 요약N X M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 다음의 4 X 5 얼음 틀 예시에서는 아이스크림이 총 3개 생성된다. 00110000111111100000 `입력 조건`첫 번째 줄에 얼음 틀의 세로 길이 N과 가로길이 M이 주어진다. 두 번째 줄부터 N+1 번째 줄까지 얼음 틀의 형태가 주어진다. 이때 구멍이 뚫려있는 부분은 0, 그렇지 않으면 1이다. 사고 정리 DFS 로 풀이해주면 된다.상, 하, 좌, 우를 모두 살펴보면 탐색해야하기 때문..
[백준/1260번] DFS와 BFS ( 실버 🥈2)
·
코딩테스트/백준
문제 요약문제 링크: https://www.acmicpc.net/problem/1260 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다.정점 번호는 1번부터 N번까지이다.사고 정리 DFS는 재귀함수로 구현할 수 있다. 선택한 노드로부터 가장 깊이 탐색하는 방식을 택한다. 아래 구현한 함수를 보면, 함수가 실행되자마자 우선 방문 처리를하고, for문을 돌면서 방문한적이 없고, 노드끼리 연결되어 있다면 바로 DFS 함수를 재귀적으로 불러준다.BFS는 deque로 구현할 수 있다. DFS와 다르게 재귀적으로 함수를 호출하지 않는다. 그..
03. DFS/BFS
·
알고리즘
BackgroundBFS와 DFS 알고리즘을 이해하고 구현하기 위해서 기본적인 자료구조를 복습하고 넘어가자.먼저, 스택과 큐 개념이다.스택이란?First in Last Out (선입후출) 구조로 박스 쌓기에 비유할 수 있다. 박스는 아래에서부터 차곡 차곡 위로 쌓게 되는데, 먼저 넣었던 것을 빼기 위해서는 위에 쌓은 박스들을 우선 제거해줘야한다. 스택 자료구조는 위와 같은 방식으로 동작한다. 이를 파이썬에서 구현하기위해서는 별도의 라이브러리는 필요하지 않고, 리스트를 활용하면된다. 리스트에서 append를 쓰면 박스를 쌓는거고 pop을 하면 가장 위에 있는 박스를 내려놓는거라고 이해하면 쉽다. 큐란?First in First Out (선입선출) 구조로 줄 서기에 비유할 수 있다. 놀이공원에 줄을 서면 먼..