백준 2812번 - 크게 만들기

김혁·2022년 1월 17일
0

백준알고리즘

목록 보기
5/13

백준 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시간 반을 이걸로 녹여버렸다.. 손해.. 이게 나중에 도움이되는 문제였음 좋겠다

profile
군도리

1개의 댓글

comment-user-thumbnail
2022년 2월 21일

ㅋㅋㅋㅋreadline() 개꿀하면서 쓰다가 strip때문에 몇시간 날리는건 다들 겪는구나 ㅋㅋㅋㅋㅋㅋㅋ

답글 달기