728x90
반응형

알고리즘/백준 61

[파이썬] BOJ_2798(블랙잭)

문제 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 해설 n장의 카드 중 3장을 더해 m을 넘지 않으면서 가장 가까운 수를 구하는 문제기 때문에 3중 반복문을 돌면서 한장씩 더하면 된다. 여기서 조심해야 할 것은 j는 i+1부터 돌아야 하고, k는 j+1부터 돌아야 한다는 것이다. 그렇지 않으면 똑같은 카드를 더하게 된다. 3장을 더한 값이 m보다 작거나 같으면 배열에 넣고 m을 넘지 않으면서 가장 가까운 수는..

알고리즘/백준 2023.06.01

[파이썬] BOJ_2644(촌수계산)

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 해설 입력값을 받고 그래프를 생성하는 부분을 지나면 dfs 혹은 bfs로 문제를 풀어야 한다. dfs로 풀 때는 촌수를 cnt에 저장했다. 함수 한 번 씩 돌 때 마다 촌수가 1씩 올라간다. bfs로 풀 때는 deque를 이용하면 된다. 따로 촌수를 받을 필요는 없고 visited 변수에 현재 visited 값에 1촌을 더해서 저장해주면 된다. 처음 a를 1로 시작하는데 ..

알고리즘/백준 2023.05.30

[파이썬] BOJ_2309(일곱 난쟁이)

문제 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 해설 9명의 난쟁이 중 2명이 가짜인 것이기 때문에 우선 난쟁이들 키의 합에서 2명씩 빼보면서 100이 되는 때를 찾으면 된다. 이중 반복문을 사용해 0번 인덱스와 1번 인덱스부터 두개씩 빼보면 된다. 찾은 경우 반복문 안에서 해당 i번, j번 인덱스를 제거하면 i번 인덱스가 항상 j번 인덱스보다 앞에 있어서 인덱스가 앞으로 하나씩 밀리는 경우가 생기기 때문에 인덱스를 따로 저장하고 반복문 밖에서 제..

알고리즘/백준 2023.05.27

[파이썬] BOJ_2231(분해합)

문제 https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 해설 분해합이 생성자 + 생성자의 각 자릿수이기 때문에 1부터 각 자릿수를 더해보면서 입력값 n과 같아지는 때를 찾으면 된다. 생성자가 여러개인 경우 가장 작은 생성자만 찾으라고 했으니 모든 생성자를 찾고 그 중에 가장 작은 수만 출력하는 것이 아니라 처음부터 가장 작은 생성자만 찾으면 된다. 1부터 시작이기 때문에 생성자를 찾으면 가장 작은 생성자가 되므로 그 ..

알고리즘/백준 2023.05.23

[파이썬] BOJ_8958(OX퀴즈)

문제 https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 해설 O가 연속해서 나오면 해당 문제의 점수는 연속된 O의 개수가 되기 때문에 다음 문제가 정답(O)인지 / 오답(X)인지 체크해야 한다. 쉽게 O의 개수를 체크하는 변수를 만들어 연속되면 +1을 해주고 그렇게 만들어진 변수의 값을 총 점수를 구하는 변수에 더해주면 된다. 코드 -파이썬 #백준 8958(OX퀴즈) n = int(input()) for i in range(n..

알고리즘/백준 2023.05.21

[파이썬] BOJ_17608(막대기)

문제 https://www.acmicpc.net/problem/17608 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 www.acmicpc.net 해설 가장 뒤의 막대기는 항상 보여지기 때문에 cnt를 1로 초기화 해준다. 뒤부터 비교하면서 더 큰 막대기가 나오면 cnt를 +1해주고 비교값인 stick을 해당 막대기로 바꿔 비교해나간다. 이렇게 해야 큰 막대기 뒤에 가려지는 막대기들을 가려낼 수 있다. 코드 -파이썬 #백준 17608(막대기) import sys input = sys.stdin.readline n = int(input()) ..

알고리즘/백준 2022.11.07

[파이썬] BOJ_1212(8진수 2진수)

문제 https://www.acmicpc.net/problem/1212 1212번: 8진수 2진수 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다. www.acmicpc.net 해설 https://www.ibm.com/docs/ko/aix/7.1?topic=adapters-ascii-decimal-hexadecimal-octal-binary-conversion-table ASCII, 10진수, 16진수, 8진수, 2진수 변환표 이 테이블에서는 ASCII, 10진수, 16진수, 8진수, 2진수 값 변환에 도움이 되는 정보를 참조할 수 있습니다. 표 1. ASCII, 10진수, 16진수, 8진수, 2진수 값 사이의 변환 ASCII 10진수 16진수 8진수 2진 널(null) ..

알고리즘/백준 2022.08.13

[파이썬] BOJ_2745(진법 변환)

문제 https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 해설 이 문제는 파이썬에서 제공하는 int함수를 사용하면 쉽게 풀 수 있지만 그래도 진수 변환 방법만 알면 간단한 알고리즘으로 풀 수 있어서 작성해보았다. 2진수를 10진수로 변경해보았다. 위 방법처럼 계산만 해주면 된다. 우선 받은 문자를 역순으로 뒤집어 주면 편하다. 알파벳인지 숫자인지 구분한 다음, 알파벳이라면 실제 아스키 코드 값에선 A가 65이지만 문제에선 10으로 하기로 했으니 55..

알고리즘/백준 2022.08.12

[파이썬] BOJ_10866(덱)

문제 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 해설 문제 제목대로 덱을 이용하여 풀면 된다. 코드 -파이썬 #백준 10866(덱) from collections import deque import sys n = int(sys.stdin.readline()) deq = deque() for i in range(n): x = sys.stdin.readline().split() if x[0] == 'push_front': de..

알고리즘/백준 2022.06.10

[파이썬] BOJ_10828(스택)

문제 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 해설 이 문제는 가장 기본적인 스택 문제이다. 코드 -파이썬 #백준 10828(스택) import sys n = int(sys.stdin.readline()) stack = [] for i in range(n): x = sys.stdin.readline().split() if x[0] == "push": stack.append(x[1]) if x[0] == "pop": if..

알고리즘/백준 2022.05.24
728x90
반응형