본문 바로가기

알고리즘/백준5

BOJ : 11866. 요세푸스 문제 0 (python) BOJ 11866 문제 링크 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 풀이 원형 큐 문제이다 근데 1158 요세푸스 문제와 다른게 무엇인지? idx가 arr의 길이를 넘으면 다시 앞으로 돌려줘야한다 => mod연산 사용 코드 #11866. 요세푸스 문제 0 N, K = map(int, input().split()) arr = [_ for _ in range(1,N+1)] ans, idx = [], 0 while len(ans) < N: idx = (idx + K -1) % len(arr) ans.append(arr[idx]) arr = arr[:idx] + arr[idx+1:] print.. 2021. 12. 11.
BOJ : 4889. 안정적인 문자열 (python) BOJ 4889 문제 링크 4889번: 안정적인 문자열 입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우 www.acmicpc.net 풀이 }{가 들어왔을 때 아무것도 없을 때 }가 들어왔으면 무조건 {가 되어야 하므로 count 값 +1 하고 }가 들어왔을때는 }안바꿔도 되는걸 계산하려고 {로 바꿔서 스택에 넣어줌 {{가 들어왔을 때 {는 무조건 스택에 집어 넣고 2개 일때 하나만 바꿔야 하니까 스택에서 //2 해서 결과 count값에 더해줌 코드 #4889. 안정적인 문자열 tc = 1 while True: s = input() st, res = [], 0 i.. 2021. 12. 11.
BOJ : 10799. 쇠막대기 (python) BOJ 10799 문제 링크 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 풀이 ()는 레이저이므로 ()를 다른 문자로 replace 하여 바꿔주었다. 만약 * 이면 레이저이므로 스택에 들어있는 막대기가 한번 잘리므로 res에 len(stack)을 더해 줌. stack에는 (밖에 없으므로 )가 들어왔을 때에는 하나의 막대기로 생각하여 pop해준다. 코드 #10799. 쇠막대기 iron = input().replace('()','*') stack, res = [], 0 for i in iron: if i == '(': s.. 2021. 12. 10.
BOJ : 1026. 보물 (python) BOJ 1026 문제 링크 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 풀이 A의 가장 큰 값 * B의 가장 작은 값을 찾아서 곱해 더해줌 B는 정렬할 수 없으므로 A를 내림차순(큰값)으로 정렬해주고 큰 값 부터 B의 가장 작은 값을 매칭해 나가기 시작. 매칭된 B의 수는 없애버림 코드 N = int(input()) A = sorted(list(map(int, input().split())), reverse=True) B = list(map(int, input().split())) res = 0 f.. 2021. 12. 8.