반응형

전체 글 216

[ C++ ] #1780 종이의 개수 (실버 II)

https://www.acmicpc.net/problem/1780 문제 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 종이 9개로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으로만 채워진 종이의 개수, 1로만 채워진 종이의 개수를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 37, N은 3k 꼴)이 주어진다. 다음 N개의 줄에는 N개의 정수로 행렬이 주어진다. 출..

BOJ/[ BOJ ] C++ 2024.01.08

[ C++ ] #5427 불 (골드 IV)

https://www.acmicpc.net/problem/5427 문제 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다. 빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개이다. 각 테스트..

BOJ/[ BOJ ] C++ 2024.01.08

[ C++ ] #7562 나이트의 이동 (실버 I)

https://www.acmicpc.net/problem/7562 문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 초록색 칸으로 이동할 수 있다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l 이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄에는 나이트가 현재 있는 칸, 셋째 줄에는 나이트가 이동하려고 하는 칸이 주어진다. 출력 각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다. 풀이 이..

BOJ/[ BOJ ] C++ 2023.12.29

[ C++ ] #2493 탑 (골드V)

https://www.acmicpc.net/problem/2493 문제 KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오른쪽 방향으로 차례로 세우고, 각 탑의 꼭대기에 레이저 송신기를 설치하였다. 모든 탑의 레이저 송신기는 레이저 신호를 지표면과 평행하게 수평 직선의 왼쪽 방향으로 발사하고, 탑의 기둥 모두에는 레이저 신호를 수신하는 장치가 설치되어 있다. 하나의 탑에서 발사된 레이저 신호는 가장 먼저 만나는 단 하나의 탑에서만 수신이 가능하다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에 일렬로 서 있고, 모든 탑에서는 주어진 탑 순서의 반대 방향(왼..

BOJ/[ BOJ ] C++ 2023.12.27

[ C++ ] #1874 스택수열 ( 실버 II )

https://www.acmicpc.net/problem/1874 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 ..

BOJ/[ BOJ ] C++ 2023.12.26

[ 오류 ] 런타임 에러 (Segfault)

백준을 풀다가 처음으로 Segfault가 발생했다...!! 근데 아무리봐도 일어날만한 곳이 없는것이다... 검색을하다가 점검해야할 부분을 깨닫게 되었고 안까먹기 위해 적어놓는다. 1. 배열, stack을 선언하고 내부를 건드는지 2. 반복문 내부에서 적절한 타이밍에 나가지 않아서 건들면 안되는 것을 건드는가..? 1번은 잘 알고있었는데 2번을 놓치고 있었다.

BOJ/오류 2023.12.26

[ C++ ] #15649 N과 M

모든 경우의 수를 하나하나 확인해봐야하는 문제다! 엥 간단하다! 하고 덤볐는데 for문 8개 돌리기밖에 생각이 안났다. 어쩌지어쩌지하다가 재귀를 풀면 될 것 같다..! 라고생각했고 배열을 만들어 맨 앞에서 부터 차례대로 채워 나가면 되겠다는 생각을 했다. 인자 n번째 칸을 결정하는 함수를 만든뒤 차례차례 뒤에를 채울 수 있게 재귀를 돌렸다. n번째칸이 문제에서 제시된 M과 같다면 모아놓은 배열을 출력하고 다시 새로운수를 만들면된다. #include using namespace std; int N, M; int num[10]; int check[10]; void NM(int n) { if (n == M) { for (int i = 0; i < M; i++) { cout M; NM(0); return 0; }

BOJ/[ BOJ ] C++ 2023.03.06

[ C++ ] #1074 Z

찾으려는 값이 들어간 2*2 박스의 첫 칸만 안다면 찾으려는 값도 쉽게 찾을 수 있다 순서가 필요하기 때문에 고민이 되는 문제이다 먼저 제일먼저 생각나는건! 재귀로 배열을 채우고 주어진 배열의 값을 출력하는것이다! 하지만 이런 방법은 너무 비효율적일 것 같다. 2의 15승까지 될 수 있는데..이는너무 오래걸린다. 그래서 생각해본건 4개로 나누고 찾으려는 숫자가 있는 범위를 4칸 중에 한 칸를 선택하고, 또 그 한 칸을 4개로 나누고 범위를 찾고 하면서 구체화 시키면 될 것 같다. 정리하자면 전체 칸을 4칸으로 나누고 각 칸은 그 칸의 제일 앞에있는 수로 관리하는 것이다. 각 칸의 맨 앞에 있는 수의 좌표와 값을 알아야하는데, 규칙을 찾아보면 다음과 같이 된다는 것을 알 수 있다. Z함수는 a,b점이 대표..

BOJ/[ BOJ ] C++ 2023.02.28

[ TCP/IP ] 라우팅

라우팅 서로 다른 네트워크 간의 통신에서 패킷은 여러개의 라우터를 경유하여 수신처에 도달한다. 이 때 라우터가 수신처까지의 경로 결정을 라우팅이라고 한다. 라우팅을 수행하기 위해서는 라우팅 테이블이라는 정보를 갖고있다. 회수한 패킷의 수신 IP주소를 보고 라우팅 테이블을 참고로 다음에 어떤 라우터에게 전송할지 결정한다. 라우팅 테이블에는 다음과 같이 구성되어있다. 수신 네트워크 : 최종 네트워크의 주소와 서브넷 마스크가 들어간다. 다음 홉 주소 : 다음 라우터의 IP주소와 서브넷 마스크가 들어간다. 매트릭 : 경로의 최적도를 나탄는 수치가 들어간다. 값이 적을수록 뛰어난 경로라는 의미이다. 출력 인터페이스 : 다음 전송처에서 데이터링크 층의 어떤 프로토콜을 사용할지 결정하기 위한 데이터링크 정보가 들어간..

공부/TCP IP 2023.02.27
반응형