Computer Science 281

[백준 - Python] 2531 - 회전 초밥

0. 문제 링크 https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 1. 풀이 방법 4개씩 투포인터로 범위를 잡는다. set으로 만든 후에, 중복되지 않는 개수를 센다. 만약 행사로 주는 쿠폰에 해당하는 번호가 없으면, 1을 더해서 개수를 센다. 마지막으로 '회전 초밥' 이므로, 맨 뒤에서 맨 앞까지 먹는 경우도 계산해야 한다. 해당 코드는 매우 느리다. 최적화 작업은 하지 않았다. 통과는 된다. 아래는 내가..

[백준 - Python] 11049 - 행렬 곱셈 순서

0. 문제 링크 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 1. 풀이 방법 예전 알고리즘 시간에 풀었던 문제라 비교적 간단하게 풀 수 있었음 2022.04.15 - [Computer Science/알고리즘] - [알고리즘] 동적 계획법 - 연쇄 행렬곱셈 (Chained Matrix Multiplication) 예전에 내가 쓴 글을 보면 자세히 설명해 놓았음 키 포인트는 i ~ i + dia까지의 최적을 구하기 위해서는 i ~ ..

[백준 - Python] 22945 - 팀 빌딩

0. 문제 링크 https://www.acmicpc.net/problem/22945 22945번: 팀 빌딩 능력치가 다 다른 개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같 www.acmicpc.net 1. 풀이 방법 정렬할 필요 없음. 정렬을 한다면, 각 개발자의 인덱스도 따로 저장해놔야 함. 결론적으로 인덱스도 맞춰서 계산해야 하므로, 굳이 할 필요가 없음 투 포인터로 양 측 끝부터 시작했음 min 값을 수정해야 하므로, min 값이 되는 포인터를 옮겼음 만약 두 개의 값이 같다면 둘 다 옮겼음. 해당 문제의 경우 하나의 포인터만 옮겨도 정답이 맞음. 다만 하나의 포인터..

[백준 - Python] 18870 - 좌표 압축

0. 문제 링크 https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 1. 풀이 방법 중복 제거를 위하여 세트로 정렬한다. 각 번호의 인덱스가 압축된 좌표의 번호가 된다. 그대로 출력하면 끝 2. 코드 import sys input = sys.stdin.readline if __name__ == "__main__": n = int(input()) maps = list(map(int, input().s..

[백준 - Python] 2193 - 이친수

0. 문제 링크 https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 1. 풀이 방법 0으로 끝나는 숫자와 1로 끝나는 숫자를 구분한다. i 자리의 숫자는 i - 1 번째 어떤 숫자든 0을 붙여도 상관없다. i 자리의 숫자는 i - 1 번째 숫자에서 끝이 0으로 끝나는 숫자에만 1을 붙일 수 있다. 이런 점화식을 세운 후 문제를 풀면 끝 조금 더 최적화를 위해서 메모리를 2*2만 사용하였다. 실제 메모리 사용은 줄어들지 않았는데, 이유는 ..

[백준 - Python] 20366 - 같이 눈사람 만들래?

0. 문제 링크 https://www.acmicpc.net/problem/20366 20366번: 같이 눈사람 만들래? 높이가 (2, 5), (3, 5)로 구성된 눈사람 둘을 만드는 것이 최적의 경우 중 하나이다. |7-8| = 1 다른 경우로는 (2, 9), (5, 5)로 두 눈사람을 만드는 경우가 있다. |11-10| = 1 www.acmicpc.net 1. 풀이 방법 투 포인터로 풀었음 (투 포인터로 안 풀어도 됨) 이를 위하여 눈덩이를 크기 순서대로 정렬하였음 우선 엘사의 범위는 for문을 이용하여 구하였음 엘사의 눈사람의 길이가 정해지면, 투포인터를 이용하여 안나의 눈사람의 길이를 구함 만약 엘사 > 안나라면 안나의 눈사람이 커져야 하므로 left += 1 하였음 만약 엘사 < 안나라면 안나의 ..

[백준 - Python] 7662 - 이중 우선순위 큐

0. 문제 링크 https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 1. 풀이 방법 파이썬에는 우선순위 큐를 위한 모듈이 있음. 해당 모듈을 사용하면 최솟값 힙, 최댓값 힙을 구현할 수 있음 최솟값 힙, 최댓값 힙을 만들었음 여기서 생기는 문제점은 최솟값 힙에서 삭제한 숫자가 최댓값 힙에는 적용되지 않는다는 문제점임 따라서 최솟값 힙에서 삭제한 숫자를 따로 저장하는 딕셔너리를 만들었음. 최댓값 힙에도 마찬가지로 생성함 만약 최솟값 힙에서 숫자 ..

[백준 - Python] 1045 - 도로

0. 문제 링크 https://www.acmicpc.net/problem/1045 1045번: 도로 0부터 N-1까지의 번호가 매겨져 있는 N개의 도시와 두 도시를 연결하는 도로가 있다. 도로에는 우선순위가 있는데, A와 B가 (A < B) 도로 x로 연결되어 있고, C와 D가 (C < D) 도로 y로 연결되어 있을 때, www.acmicpc.net 1. 풀이 방법 edge가 (a, b)가 있다면, a < b가 되도록 모든 간선을 우선순위 큐에 넣음 이때 모든 간선의 개수가 m보다 작다면 -1을 출력 크루스칼 알고리즘을 사용하여 mst를 만들었음 만약 mst가 만들어지지 않으면, 모두 연결되지 않는 것이므로 -1을 출력 크루스칼 알고리즘을 진행하는 도중에 쓸모없는 간선은 따로 관리함 이때 우선순위 큐로 ..

[네트워크] TCP - RTT Estimation and Timeout

앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.17 - [Computer Science/네트워크] - [네트워크] TCP - Segment Structure [네트워크] TCP - Segment Structure 앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.17 - [Computer Science/네트워크] - [네트워크] TCP - Connection-Oriented Transport [네트워크] TCP - Connection-Oriented Transport 앞의 글을 읽으시면 이해에 도움이 hi-guten-tag.tistory.com 2023.04.17 - [Computer Science/네트워크] - [네트워크] Principles of Reliable Data Transf..

[백준 - Python] 20442 - ㅋㅋ루ㅋㅋ

0. 문제 링크 https://www.acmicpc.net/problem/20442 20442번: ㅋㅋ루ㅋㅋ 어떤 문자열에서 몇 개의 문자를 지워서 부분 수열을 만들 수 있다. 예를 들어, ABC의 부분 수열은 ABC, AB, BC, AC, A, B, C와 빈 문자열이다. www.acmicpc.net 1. 풀이 방법 https://chanu-ps.tistory.com/24 우선 위의 블로그를 참고하였습니다. 맨 처음에 원포인터로 각 R의 위치에서 양 옆의 K의 개수를 세서 구하는 식으로 했는데, 예제랑 질문 게시판의 반례도 다 맞았는데도 1% 펑하길래 좀 힘들었습니다. 혼자 막 도전하다가 결국 구글링을 했는데, 위의 블로그가 매우 잘 정리해놓았습니다. 그래도 혹시 문제가 이해 안 간다던가 풀이가 이해가 ..