반응형

분류 전체보기 147

백준 13549 숨박꼭질3 c++ [컴공과고씨]

https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 간단 정리 수빈이는 일직성 상에 n이라는 점에 있고 동생은 k라는 점에 있다. 수빈이는 걷거나 순간이동을 하는데 위치가 x일때 걷는다면 1초 후 x-1 or x+1로 이동하고 순간이동하면 0초 후 2*x 만큼 이동할 때 동생을 찾을 수 있는 가장 빠른 시간을 구해라. 문제 해결 방법 저는 bfs를 통해서 해결해 주었습니다. 수빈이의 점에서 일직성 상 범위 내..

알고리즘/백준 2023.01.03

백준 1238 파티 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 다익스트라 알고리즘을 활용한 문제로 bfs를 이용해도 가능하지만 시간 측면으로 볼때 다익스트라가 더 빠르고 나중에 다른 문제를 풀 때 다익스트라로 풀지않고 bfs로 풀면 시간 초과가 걸리는 문제들이 많기 때문에 최단 경로 문제 같은 경우 다익스트라로 풀어주는게 좋다. 다익스트라 알고리즘는 https://hagisilecoding.tistory.com/134 여기서 살..

알고리즘/백준 2023.01.02

다익스트라(Dijkstra) 간단 정리 [컴공과고씨]

백준을 풀다보면 마주하는 최단 경로 탐색 알고리즘 다익스트라이다. 다이나믹 프로그래밍을 활용한 알고리즘으로 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려준다. 다만 이때 음의 간선을 포함하면 안된다. 간선에 음수가 포함 되어있을 때에는 벨만-포드 알고리즘을 사용해야하는데 이것은 나중에 다루어 보고 일단 다익스트라에 대해서 살펴보자. 핵심은 1. 목표 정점까지의 최단 거리는 여러개의 최단 거리로 이루어져있다. 2. 그래서 하나의 최단 거리를 구할 때 그 전까지 최단거리를 이용해준다. 먼저 선언해주어야 하는 것이 우선순위 큐, 각 정점까지의 거리를 담을 dst[] 배열이다. 우선순위 큐는 다음 정점의 번호와, 다음 정점까지 거리를 담고 있고 다음 정점까지 거리를 최소로 하는 것이 루트로 갈 수 ..

백준 1043 거짓말 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 문제 간단 정리 지민이가 여러 개의 파티에 감. 파티마다 참석하는 사람이 주어짐. 지민이가 거짓말을 할 건데 진실을 아는 사람이 주어짐. 진실을 아는 사람에게 거짓말을 하면 안됨. 또한 어느 파티에서는 거짓을 듣고 다른 파티에서 진실을 듣는 것도 안됨. 즉, 거짓말이라는 것을 아무도 알아채지 못하게 거짓말을 많이 할 수 있는 파티의 개수를 구하라. 문제 해결 방법 이 문제 같은 경우 유니온 파인드를 쓰면 쉽..

알고리즘/백준 2022.11.20

백준 2407 조합 c++ [컴공과고씨]

https://www.acmicpc.net/problem/2407 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net 문제 간단 정리 이 문제는 말 그대로 nCm을 구해주면 되는 문제이다. nCm 이란 서로 다른 n개 중 m개를 뽑는 방법을 말한다. 구하는 법은 n!/m!(n-m)! 이다. 문제 해결 방법 이런 문제 같은 경우 공식을 구현하기 할 수는 있겠지만 답이 겁나게 크게 나오는 걸 볼 수 있다. 즉, c++에서는 저런 큰 수를 정수로 담을 변수가 없기도 하고 공식 구현 하더라도 일일이 다 곱하는 팩토리얼이 있기 때문에 시간초과가 걸릴 수 밖에 없다. 일단 써봐서 규칙을 찾아보는 것이다. 1C0 1C1 2C0 2C1 2C2..

알고리즘/백준 2022.11.15

백준 1692 곱셈 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 문제 간단 정리 정말 간단하다 a,b,c가 주어짐. a^b을 구하는 문제임. 단 a^b값이 너무 클 수 있으니 c로 나눈 나머지를 구하면됨. 문제 해결 방법 일단 나머지 정리를 알아야함. 나머지 정리는 그냥 간단하게 그냥 ((a%c) * (b%c) %c) 하고 (a*b)%c 같다. 즉, 이런 문제가 나오면 그냥 나머지 구하고 곱해주고 나머지 구해주면 된다. 제한 시간이 2초이기 때문에 1초에 3~5억번 연산을 한다고 했을 때 문제의 주어진 수가 최대 21억이기 ..

알고리즘/백준 2022.11.10

백준 1932 정수 삼각형 c++ [컴공과고씨]

https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 문제 정리 7 3 8 8 1 0 2 7 4 4 처럼 삼각형이 주어짐 이때 삼각형의 크기가 주어지는데 높이를 나타냄 이 삼각형의 크기는 4임. 이렇게 해서 위에서 부터 숫자를 더해 밑으로 내려온다. 내려갈때는 왼쪽, 오른쪽 대각선으로 이동이 가능하다. 이때 숫자의 최대 합은? 문제 해결 방법 일단 다이나믹 프로그래밍을 이용해서 문제를 풀어야한다. 그리고 쉽게 문제를 풀기 위해 위 삼각형을 0 7 ------ 1번 줄 0 3 8 ------ 2번 줄 0 8 1 0 ----..

알고리즘/백준 2022.10.26

백준 5639 이진 검색 트리(linked list 활용) c++ [컴공과고씨]

https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 문제 간단 정리 이진트리가 있음 - 노드의 왼쪽 서브트리에 있는 모든 노드의 값은 부모의 값보다 작음. - 노드의 오른쪽 서브트리에 있는 모든 노드이 값은 부모의 값보다 큼. 이 이진 트리에서 전위 순회 -> 루트 - 왼쪽 - 오른쪽 방문 하며 출력. 후위 순회 -> 왼쪽 - 오른쪽 - 루트 방문 하며 출력. 인데 전위 순회 결과가 주어졌을 때 후위 순회한 결과를 한 줄에 하나씩 출력..

알고리즘/백준 2022.10.22

리눅스(linux) File I/O의 system calls [컴공과고씨]

리눅스에서의 file i/o에 대한 system call과 c를 이용해서 파일 입출력을 해보겠습니다. 일단 system call이란 application 즉, 사용자가 쉽게 프로그래밍할 수 있도록 만든 언어들 c++ 이런것 들은 하드웨어를 직접 access할 수 없습니다. hardware는 운영체제가 관리를 하기 때문에 하드웨어 접근이 필요할 때 운영체제에게 서비스를 요청할 때 system call을 사용하여 요청한다고 볼 수 있습니다. 리눅스에서의 file i/o에 관한 system call은 open, read, write, close lseek, fcntl, ioctl 이 있습니다. #include 를 하게되면 자동적으로 STDIN_FILENO (0) STDOUT_FILENO(1) STDERR_FI..

CS/리눅스(Linux) 2022.10.11

백준 9935 문자열 폭발 c++ [컴공과고씨]

https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 문제 간단 정리 문자열이 2개 주어짐 하나는 전체 문자열 다른 하나는 폭발 문자열. 전체 문자열 안에 폭발 문자열이 있으면 그 폭발 문자열이 폭발하여 없어짐. 모든 폭발 문자열이 없어지고 난 후 전체 문자열에 남아 있는 문자열 구하라. 해결 방법 최대한 반복을 적게 해야지 시간 초과가 나지 않는다. 즉, 그냥 무작정 한 개씩 비교하다 폭발이 일어나고 다시 앞에서 비교하면 당연히 시간..

알고리즘/백준 2022.10.10
반응형