https://www.acmicpc.net/problem/2845
풀이: 상근이가 계산한 참가자의 수 -> L * P 와 각 기사에 적혀있는 참가자의 수의 차이를 출력한다
코드: 사용언어 : python
1 2 l,p=map(int,input().split()) for i in [*map(int,input().split())]: print(i-l*p,end=' ')
https://www.acmicpc.net/problem/2550
풀이: 전기줄 - 2 참고
코드: 사용언어 : python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import bisect d,q,c,e={},[],[],[] n=int(input()) for i in map(int,input().split()): d[i]=0 for k,i in enumerate(map(int,input().split())): d[i]=k for k,i in d.items(): s=bisect.bisect_left(q,i) if s!=len(q):q[s]=i else:q+=[i] c+=[s] s=len(q) print(s) for i in range(n-1,-1,-1): if c[i]==s-1:e+=[list(d)[i]];s-=1 print(' '.join(map(str,sorted(e))))
https://www.acmicpc.net/problem/18353
풀이: 가장 긴 증가하는 부분 수열 5 참고
정확히 말하면 가장 긴 감소하는 부분 수열이지 않을까? 라는 생각이 드는 문제이다.
말 그대로 감소하는 것이기에 뒤에서부터 증가하는 수열을 찾을까? 라는 생각이 들었지만,
귀찮은 관계로 모든 수에 음수 처리를 해주어 가장 긴 증가하는 부분 수열을 찾게되었다.
코드: 사용언어 : python
1 2 3 4 5 6 7 8 import bisect n=int(input()) q=[] for i in map(int,input().split()): s=bisect.bisect_left(q,-i) if s!=len(q):q[s]=-i else:q+=[-i] print(n-len(q))
https://www.acmicpc.net/problem/3745
풀이: 가장 긴 증가하는 부분 수열 5 참고
파이썬에서 EOF 처리하는 방법을 알게되었다.
C++ 에서는 while문 내부에서 cin이나 scanf의 return 값으로 알 수 있었지만, 파이썬은 안되더라.
그냥 단순하게 try catch 문에서 EOF를 감지해서 EOF 일 때 exit() 하는 방법으로 하는 것 같다.
다른 의견으로는 그냥 무한루프를 돌리면 알아서 중지되면서 맞았습니다가 떴다고 하는데, 나는 안되서 잘 모르겠다.
코드: 사용언어 : python
1 2 3 4 5 6 7 8 9 10 import bisect try: while input(): q=[] for i in map(int,input().