일일 알고리즘 – 230324: (백준 6603) 로또, (백준 ​​1182) 하위 시퀀스의 합, (백준 ​​5430) AC

* 백준 6603 로또

https://www.acmicpc.net/problem/6603

6603호: 로또

입력은 여러 테스트 케이스로 구성됩니다.
각 테스트 케이스는 한 줄로 구성됩니다.
첫 번째 숫자는 k(6 < k < 13)이고 다음 k 숫자는 집합 S에 포함된 숫자입니다.
S의 요소는 오름차순입니다.

www.acmicpc.net

from itertools import combinations
while True:
  slist = list(map(int,input().split()))
  if slist(0)==0:break
  for out in combinations(slist(1:),6):
    print(*out, sep=' ')
  print()

* 백준 1182 서브시퀀스의 합

https://www.acmicpc.net/problem/1182

6603호: 로또

입력은 여러 테스트 케이스로 구성됩니다.
각 테스트 케이스는 한 줄로 구성됩니다.
첫 번째 숫자는 k(6 < k < 13)이고 다음 k 숫자는 집합 S에 포함된 숫자입니다.
S의 요소는 오름차순입니다.

www.acmicpc.net

from itertools import combinations
n,s = map(int,input().split())
slist = list(map(int,input().split()))
answer = 0
for i in range(1,n+1):
  for j in combinations(slist,i):
    if sum(j)==s : answer+=1
print(answer)

* 백준 5430AC

https://www.acmicpc.net/problem/5430

5430호: AC

각 테스트 케이스에 대해 함수 실행 결과는 입력으로 주어진 정수 배열에 출력됩니다.
오류가 발생하면 오류가 발행됩니다.

www.acmicpc.net

def R(arr):
arr.reverse(); return arr

def D(arr):
try: arr.pop(0); return arr
except IndexError: return ()

def main():
p=input().strip() #명령어
n=int(input()) #주어진리스트 길이
arr=(int(ii) for ii in map(str,input()(1:-1).split(',')) if ii.isdigit())
for i in p:
if i=='R': arr=R(arr)
elif i=='D':
if len(arr)>1 : arr=D(arr)
else : return print('error')
else: pass
return print(arr)

if __name__=="__main__":
t=int(input())
for i in range

- 오류 분석 및 계획: readline 시도, eval 빼기 => 없음.

## (시간초과) 실패
def main():
p=input().strip() #명령어
n=int(input()) #주어진리스트 길이
arr=(int(ii) for ii in map(str,input()(1:-1).split(',')) if ii.isdigit())
r=0 #reverse 횟수
for i in p:
if i=='R': r+=1
elif i=='D':
if len(arr)!
=0 :
if r%2==0:
arr=arr(1:) # reverse 짝수(맨앞제거)
r=0
else:
arr.pop(-1) # reverse 홀수(맨뒤제거)
else :
return print('error')
else: pass
if r%2!
=0 : arr.reverse()
return print(arr)

if __name__=="__main__":
t=int(input())
for i in range

- 오류 분석: pop(n)은 O(n), pop() 및 pop(-1)은 O(1), 목록 대신 양방향 목록인 deque를 사용하여 줄일 수 있음(O( 1 ))

from collections import deque
def main():
p=input().strip() #명령어
n=int(input()) #주어진리스트 길이
arr=deque((int(ii) for ii in map(str,input()(1:-1).split(',')) if ii.isdigit()))
r=0 #reverse 횟수
for i in p:
if i=='R': r+=1
elif i=='D':
if len(arr)!
=0 :
if r%2==0:
arr.popleft() # reverse 짝수(맨앞제거)
r=0
else:
arr.pop() # reverse 홀수(맨뒤제거)
else :
return print('error')
else: pass
if r%2!
=0 : arr.reverse()
return print(str(list(arr)).replace(' ',''))

if __name__=="__main__":
t=int(input())
for i in range

계속 실수를 해서 당황스러웠는데 원인은 시간이 아니라 결과적으로 출력되는 리스트에 띄어쓰기가 안되더라구요.. ^^!