[크래프톤 정글] - 16일

SpongeCake·2023년 4월 18일
0

python

목록 보기
11/12
post-thumbnail

스택 문제 - G3-2812-크게 만들기

나의 풀이 법 (스택의 갯수와 남은 숫자의 갯수를 비교해서 계산)

from sys import stdin as s
from collections import deque

s = open('input.txt')

N, K = list(map(int,s.readline().split()))

arr = list(map(str.rstrip,s.readline()))


a = deque()
a.append(int(arr[0]))

for i in range(1,N):
   while len(a) + N-i-1 >= N-K: # 스택 개수 + 남아있는 숫자 개수 >= 마지막에 필요한 개수
       if len(a)-1 >=0 and int(arr[i]) > a[len(a)-1]: # 스택의 크기가 0보다 크거나 같고, 현재 arr의 숫자가 스택의 마지막 숫자보다 클때 
           a.pop() # 스택의 마지막 숫자 제거
       else :
           if len(a) < N-K: # 스택의 숫자가 찾아야 하는 숫자의 개수보다 작으면 추가
               a.append(int(arr[i]))
           break

   if len(a) + N-i == N-K: # 스택의 개수 + 남은 개수가 구해야할 개수의 숫자와 일치할때 전부 입력해주기
       a.append(int(arr[i]))
   
   

for i in a:
   print(i,end='')

이렇게 스택의 길이와 남은 갯수를 가지고 풀다보니까 계산하기도 복잡하고 푸는데까지 시간도 많이 걸려서 너무 비효율적이라고 생각했다. 정답은 나왔지만 다음에 다시 풀때 또 이렇게 머리 싸매고 고민할 생각하니 이건 아니다 싶어서 다른 사람들의 풀이를 봤는데 역시 깔끔했다.

다른 풀이 법 (제거 할 수 있는 숫자를 줄여가면서 계산)

from sys import stdin as s

s = open('input.txt','rt')

n, k = list(map(int, s.readline().split()))
numbers = list(map(str.rstrip,s.readline()))
stack = []
for number in numbers:
    while stack and stack[-1] < number and k > 0:
        stack.pop()
        k -= 1
    stack.append(number)
if k > 0:
    print(''.join(stack[:-k]))
else:
    print(''.join(stack)) 

해당 풀이는 K로 받은 숫자로 pop을 할때마다 k를 하나씩 줄여가면서 k가 0이 될때 남은 숫자와 함께 출력을 하는 방법으로 풀어서 굉장히 짜기에 효율적으로 보인다.

행렬 제곱

def mul(n,matrix1, matrix2):
    result = [[0 for _ in range(n)] for _ in range(n)]

    for i in range(n):
        for j in range(n):
            for k in range(N):
                result[i][j] += matrix1[i][k] * matrix2[k][j]
            
    return result

행렬의 곱을 구하는 함수 - 3중 for문으로 각 자리 곱의 합을 result에 저장해주고 반환

히스토그램에서 가장 큰 직사각형

👉 히스토그램 문제 참조 페이지










마음의 평화를 유지하라

" 통찰력을 끊임없이 보호해야 하네. 우리가 지켜야 하는 것은 결코 작은 것이 아니야. 존엄, 신뢰, 끈기, 마음의 평화, 고통과 두려움으로부터의 해방, 한마디로 영혼의 자유로움을 얻기 위해 지켜야 하는 것들이지. 무엇 때문에 이런 것들을 타인에게 넘겨야 한단 말인가? "

- 에픽테토스, 대화록, 4.3.6b-8

어렵고 힘든 상황에 닥쳤을 때는 다음과 같은 질문을 던져야 한다. " 이것이 진정 내가 원하는 삶인가? " 화가 솟구칠 때마다 생명력이 소진된다. 값을 매길 수 없는 생명력을 어디에다 소진할 것인가? 변화를 두려워하지 말라. 그것이 비록 큰 변화라 할지라도


절제의 기쁨

" 즐거움을 느낄 때마다 그것으로부터 자신을 보호해야 한다. 거기에 휩쓸리지 말고 잠깐 멈추어라. 그런 다음 생각할 수 있는 시간을 가져라. 처음엔 즐거웠지만 훗날 후회하게 되거나 자신을 증오하게 된 경우가 없었는지 돌이켜 보라. 즐거움과 만족을 비교해 절제 할 수 있는 것인지 살펴라. 안락함과 즐거움 그리고 그것의 매력적인 이끌림에 굴복하지 말라. 이 모든 것에 저항한 후에야 이것을 극복하는 것이 얼마나 멋진 일인가를 알 수 있으니. "

- 에픽테토스, 엥케이리디온, 34

유혹에 굴복하는 순간, 매일이 괴로워지고 결국에는 자신을 혐오하게 된다. 절제한다는 것이 반드시 고통을 수반하는 것은 아니다. 유혹은 후회로 변모하고 절제는 진실한 기쁨이 된다.


현명해지기 위한 유일한 방법

" 현명해지기 위한 유일한 방법이 있다. 우리의 지적 능력에 모든 주의를 기울이는 것이다. 그것만이 우리를 어디로든 안내할 수 있다. "

- 헤라클레이토스, 디오게네스의 강의에서 인용, 탁월한 철학자들의 삶.9.1

후회하는 일을 했던 순간 결코 어리석었던 것이 아니다. 바로 그것이 문제다. 그때도 머릿속에는 합당한 이유와 지성으로 가득 차 있었다. 단지 거기에 욕망이 끼어들었을 뿐이다. 욕망이 우리 몸의 주인이 되어서는 안 된다. 또한 감정, 즉각적인 신체적 쾌락, 호르몬이 일으키는 충동이 우리 몸의 주인이 되게 해서는 안 된다. 지적 능력에 모든 주의를 기울여라. 그리고 그 상태로 내버려 두라.

❗️ 항상 후회하는 행동들을 할 때, 어리석었지 않았다. 어느때보다 지적이었고, 합당한 이유가 있었다. 하지만 재미라는 쾌락에 쉽게 유혹이 되어버려서 후회하는 행동을 저지르게 되는 것 같다.


profile
٩( 'ω' )و

0개의 댓글