본문 바로가기
공부/프로그래머스

[프로그래머스] 42883번

by _음주토끼_ 2022. 6. 15.

처음에는 문제를 잘못 이해했다.

코드를 짜다보니 어..? 이거 안맞는데? 하고 깨달았다.

문자열을 겁도없이 오름차순으로 정렬하고 k만큼 뒤에서 뚝 끊었다.

당연히 틀렸다.

문자열의 순서도 중요하기 때문이다.

그래서 stack을 이용하는 방식으로 갔다.

어제 문제에서 배열을 stack이라고 선언했으니, 오늘은 num라고 선언해봤다.

나의 철칙은 주어진 테스트 케이스가 변형되지 않도록 하는것!

temp라는 변수에 k를 넣어두고, num 배열 내에 number[0] 원소를 넣어뒀다.

그 다음으로 number의 1번째 방 원소부터 끝까지 i만큼 돌린다.

전체인 0부터 돌리지 않는 이유는 비교 때문이다.

num에는 이미 number[0]을 넣어뒀고, 1부터 시작하면 1번째 값은 0번째 값과 비교하게 된다.

만약 number[1]이 number[0]보다 크다면 number[0]을 뺀다. 더 큰 수가 그 자리를 차지하는 것이다.

복면X왕같은 프로그램을 떠올리면 된다. 더 높은 점수를 차지하면 왕좌를 갖게 된다.

그리고 pop을 한 만큼 temp를 1씩 빼준다. 왜냐면 문자열에서 빼야 하는 개수가 k개(temp개)니까.

아.. 블로그에서 글을 쓰다가 발견했는데 13번과 17번째 줄의 print는 출력 확인하려고 쓴거다. 참고만 하기.

반복문을 다 돌았는데도 temp가 0보다 크다? 그럼 아직 빼내야 하는 개수가 temp만큼 남았다는 것이다.

그럴땐 append 된 num의 뒤에서 부터 temp만큼 빼면 된다.

이럴 때 꺼내는게 배열의 출력방식. num를 num[:-temp]로 갱신해준다.

그리고 join을 이용해 공백없이 붙여서 숫자를 문자열로 출력해준다.

'공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 67256번  (0) 2022.06.15
[프로그래머스] 12973번  (0) 2022.06.15
[프로그래머스] 42586번  (0) 2022.06.15
[프로그래머스] 42747번  (0) 2022.06.15
[프로그래머스] 12903번  (0) 2022.06.15