728x90
반응형

분류 전체보기 115

[파이썬] BOJ_9012(괄호)

문제 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 해설 처음엔 아무 생각 없이 '('의 개수와 ')'의 개수를 세서 같으면 YES, 다르면 NO를 출력했었는데 그러면 안된다. ')'이 '('보다 먼저 있으면 괄호가 제대로 닫기지 않기 때문이다. 짝을 맞춰보려면 '('이 나왔을 경우 스택에 넣어주고 ')'이 나오면 스택에 들어있던 '('을 pop해준다. 대신 스택에 아무것도 없는데 ')'이 나오면 더이상 볼 것도..

알고리즘/백준 2023.06.26

[파이썬] BOJ_10448(유레카 이론)

문제 https://www.acmicpc.net/problem/10448 10448번: 유레카 이론 프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어 www.acmicpc.net 해설 triangle 리스트에 삼각수를 1000을 넘지 않는 삼각수를 구해 미리 넣어놓고 그 중 3개의 합으로 구성된 수를 찾으면 된다. 코드 -파이썬 #백준 10448(유레카 이론) import sys input = sys.stdin.readline triangle = [n*(n+1)//2 for n in range(1, 46)] #45번째 삼각수 == 1035 eureka = [..

알고리즘/백준 2023.06.24

[파이썬] BOJ_4963(섬의 개수)

문제 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 해설 이 문제는 좌표를 dx, dy에 저장하고 dfs 혹은 bfs로 풀면 된다. 좌표를 이용한 그래프 탐색 문제는 처음 풀어서 어떤 식으로 풀어야 하는지 당황스러웠는데 이런건 가장 이해하기 쉽게 푼 다른 사람 코드를 보고 외우는게 최고인 것 같다. 코드 -파이썬 #백준 4963(섬의 개수) # 1 : 땅, 0 : 바다 #dfs 풀이 import sys input = sys.stdin.r..

알고리즘/백준 2023.06.15

[파이썬] BOJ_3273(두 수의 합)

문제 https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 해설 처음에는 밑의 주석처리 된 시간 초과 코드 처럼 풀면 쉽게 해결될 거라고 생각했다. 그치만 이중 반복문을 쓰면 시간복잡도가 O(n^2)이 되어 시간 초과가 난다. 이 문제는 투포인터 문제로 리스트의 가장 처음(0)과 가장 마지막(n-1)을 각각 포인터로 설정해 위치를 옮겨가면서 원하는 값을 구하면 된다. left 위치와 right ..

알고리즘/백준 2023.06.12

[파이썬] BOJ_2605(줄 세우기)

문제 https://www.acmicpc.net/problem/2605 2605번: 줄 세우기 점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 www.acmicpc.net 해설 이 문제의 핵심은 뽑은 번호대로 그 위치에 줄을 선다는 것이다. 리스트의 insert()를 이용하면 특정 위치에 요소를 삽입할 수 있다. 번호의 순서가 제일 오른쪽이 가장 빠른 번호가 위치 하기 때문에 리스트를 역순으로 뒤집어서 출력해주면 끝이다. 코드 -파이썬 #백준 2605(줄 세우기) n = int(input()) #학생 수 num = [*map(int, input().split())..

알고리즘/백준 2023.06.11

[파이썬] BOJ_2810(컵홀더)

문제 https://www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 해설 SLLLLSSLL을 나눠서 보면 S / LL / LL / S / S / LL로 나눌 수 있다. S는 한 좌석에 컵홀더 1개, L은 두 좌석에 컵홀더 1개. 그렇다면 * / S* / LL* / LL* / S* / S* / LL* 로 표현할 수 있다. 결국 S는 1개당 컵홀더 1개 더해주면 되고, L은 L//2개당 컵홀더 1개를 더해주면 된다. 가장 왼쪽의 첫번째 컵홀더도 빼먹으면 안된다. 총 컵홀더의 개수를 구하고 나면 컵홀더와 사람 수 둘 중 작은 값을 출력해주면 된다. 문제에서 물어..

알고리즘/백준 2023.06.09

[파이썬] 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
728x90
반응형