그리디 3

[백준] 1744. 수 묶기

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 입력을 받을 때 부터 조건문을 이용해 1일 경우는 그냥 answer에 더 해주고, 1보다 클 경우는 gt_arr에, 0과 음수는 lt_arr에 담아준다. 이때 1을 리스트에 넣지 않고 더해주는 이유는 1*n 과 1+n 중에 1+n이 더 크기 때문이다. 1의 경우는 곱셈을 하면 절대 최댓값이 나오지 않는다. 양수일 경우 내림차순으로 정렬, 음수일 경우는 오름차순으로 정렬해준다. 이는 큰 원소들끼리..

알고리즘 2021.09.29

[백준] 12904. A와 B

https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 처음에는 s에서 t로 바꿔주기 위해 모든 경우의 수를 다 살펴보는 방법을 생각했는데, 이는 T의 최대 길이가 1000이므로 시간초과가 날 수 밖에 없는 코드였다. 여기서 생각의 전환이 필요한데, S를 T로 바꾸는 것이 아니라 T를 S로 바꿔준다면 while 문으로 쉽게 끝낼 수 있다. 알고리즘 문제를 풀 때 아이디어가 얼마나 중요한 지 알 수 있는 문제였다. ..

알고리즘 2021.09.28

[백준] 1541. 잃어버린 괄호

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 일단 덧셈을 먼저 다 해준 다음에 빼주면 되니까 '-'를 기준으로 split() 해준다. 리스트의 첫 원소에 숫자만 있을 수도, + 연산자가 같이 있을 수도 있으므로 일단 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에 저장한다. 그 뒤에 똑같이 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에서 계속 빼주면 된다. 처음에는 eval() 함수를 이용해서 ..

알고리즘 2021.09.28