본문 바로가기

코딩테스트/Python

[Python] 백준 #5430 - AC (백준 숏코딩 풀이 첨부)

문제


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

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

 

 

풀이


[내 코드]

import sys
input=sys.stdin.readline

T = int(input())
for _ in range(T):
    s = list(input())
    n = int(input())
    if n==0:
        arr = input()
        if 'D' in s: # 길이가 0인데 D가 있을 경우 에러 발생
            print("error")
            continue
        else: # 길이가 0인데 D가 없을 경우에는 []출력
            print("[]") 
            continue
    arr = list(input()[1:-2].split(',')) # 앞 뒤 []을 잘라주고 ,로 나눠준다.
    isRe = False # reverse 여부
    start,end=0,0 # index 선언
    for index in s[:-1]:
        if index=="R":
            isRe = not isRe
        else:
            if n==0:
                print("error")
                break
            n-=1
            if isRe: end+=1
            else: start+=1
    else:
        if isRe:
            arr.reverse()
            if start==0: arr = arr[end:]
            else: arr = arr[end:-start]
        else:
            if end==0: arr = arr[start:]
            else: arr = arr[start:-end]
        print("["+",".join(arr)+"]")

pop을 사용하면 시간이 오래걸릴것같아 인덱스를 구해서 slice 하는 방법으로 풀었다.

 

방법은 사진과 주석 참고!

 

 

 

cf) 출력부분에서 join으로 안하고 list를 바로 출력하니 틀렸다고 나왔다..

 


[다른사람 코드] 

for _ in range(int(input())):
    f=list(map(len,input().replace('RR','').split('R')))
    n=int(input())
    a=input()[1:-1].split(',')
    s,e=sum(f[0::2]),n-sum(f[1::2])
    a=a[s:e] if len(f)%2==1 else a[s:e][::-1]
    print(f"[{','.join(a)}]" if s<=e else "error")

출처는 백준 숏코딩이다.

 

 

  1.  2번 뒤집으면 같은 모양이니 ''로 치환 , R을 기준으로 나눠준다. 나눠준 것들의 길이를 구해서 리스트로 만들어준다.
  2. a의 리스트를 slice해서 구해줄것이다. 왼쪽(s), 오른쪽(e) 인덱스를 구해야한다. 왼쪽은 R을 짝수번째로 뒤집은 것(0,2,4...), 즉 f[0::2]의 합이다. 오른쪽은 홀수번째로 뒤집은 것(1,3,5...), 즉 f[1::2]을 n에서 뺀 것이다. 
  3. f의 길이가 홀수이면 뒤집지 않아도되므로 a[s:e]로 slice해준다. 짝수이면 한번 뒤집어야하므로 a[s:e][::-1]을 해준다.
  4. 만약 왼쪽 인덱스가 오른쪽 인덱스보다 크면 error를 출력해준다. 아니면 답을 출력해준다.

 

 

느낀점


그래도 이문제는 골드 문제중에서 쉬운편에 속하는거같음.. 골드치곤 막힘없이 풀었다..

백준 숏코딩을 보기전까진 이렇게 생각함^^! 쩝;; 숏코딩을 보고나니 내 코드는 무슨,. 허접 코드 ㅠ

인덱스로 접근하는 것 까지는 좋았으나.. RR을 ''로 치환하는 것과 R로 나눠 길이를 구하는 것은 상상도 못했다.

언제쯤이면 나도 저렇게 짤 수 있을까