백준 2812번 - 크게 만들기
백준 2812번 - 크게 만들기 <그리디>
나의 코드)
n,k =map(int,input().split())
num = list(map(int,input()))
len_result = len(num) - k
while len(num) > len_result:
res_min = min(num)
num.remove(res_min)
num = str(num)
print(''.join(num)
comment) 결과는 실패 ㅋㅋㅋㅋ. 오늘도 난 개발자로 취직하긴 글러먹었다.
흠 일단은 풀었다 ㅋㅋㅋ. 다만 시간초과일뿐 구글에 쳐보니 스택을 쓰지 않으면 무조건 시간초과가 뜬다고한다. 그래서 스택을 이용해서 한번 풀어보자
그 와중에 오늘 배운것이 있다.
import sys
#1
num = sys.stdin.readline()
#2
num = list(map(int,input()))
#3
num = list(map(int,sys.stdin.readline().strip()))
#4
n,k =map(int,sys.stdin.readline().split())
#5
string = '345'
string = list(string)
>>> ['3','4','5']
sys.stdin.readline은 input() 내장함수보다 속도가 빨라 코테에서 자주 이용된다. 하지만 여기서 내가 몰랐던 사실이 있다. 바로 readline은 문자열로 입력받고 뒤에 개행문자가 포함된다는 것이다.(공백포함됨) 그래서 split()같은 경우에는 공백을 다 제거하고 원소만 추출하지만 그런 경우가 아닌 입력 값이 1924와 같은경우는 2번에 input 대신 readline을 썼을 때 개행문자로 인해 오류가 난다. (개행문자는 int로 변환 불가). 즉 뒤의 3번과 같이 개행문자를 제거할 strip()을 써야한다. 5번은 그냥 문자열이 리스트화가 바로 되는지 몰랐다. 코린이라... 개꿀이니까 쓰자.
정답 코드)
import sys
n,k =map(int,sys.stdin.readline().split())
num = list(map(int,sys.stdin.readline().strip()))
result = []
count = k
for i in range(n):
while count > 0 and result:
if result[len(result)-1] < num[i]:
result.pop()
count-=1
else:
break
result.append(num[i])
#1
result = list(map(str,result))
result = ''.join(result)
print(result)
#2
result = list(map(str,result))
for i in range(n-k):
print(result[i],end= '')
comment) 1번 2번으로 나뉘는 이유는 내가 보기엔 똑같은데 왜 2번만 맞았는 지 모르겠다 걍 자살 존내 마렵다. 일단 백준 질문에 올려놨으니깐.. 어떻게든 되지 않을까..? 오늘도 연등 2시간 중에 1시간 반을 이걸로 녹여버렸다.. 손해.. 이게 나중에 도움이되는 문제였음 좋겠다
Author And Source
이 문제에 관하여(백준 2812번 - 크게 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jg31109/백준-2812번-크게-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)