반응형

 

 

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

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

# push X: 정수 X를 큐에 넣는 연산이다.
# pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
# size: 큐에 들어있는 정수의 개수를 출력한다.
# empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
# front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
# back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

def push(list, a) :
    list.append(a)

    return list

def pop (list) :
    if not list:
        print(-1)
    else :
        print(list[0])
        del(list[0])

    return list

def size(list) :
    return len(list)

def empty(list) :
    if not list:
        return 1
    else :
        return 0

def front(list) :
    if not list:
        return -1
    else :
        return list[0]

def back(list) :
    if not list:
        return -1
    else :
        return list[-1]

i = int(input())

list = []
for _ in range(i) :
    cmd = input()
    cmd = cmd.split(' ')

    if cmd[0] == 'pop':
        pop(list)
    elif cmd[0] == 'push':
        push(list, int(cmd[1]))
    elif cmd[0] == 'front':
        print(front(list))
    elif cmd[0] == 'back':
        print(back(list))
    elif cmd[0] == 'empty':
        print(empty(list))
    elif cmd[0] == 'size':
        print(size(list))

-> 이 방식으로 제출하면 채점시 시간 초과 오류가 뜬다

# 시간초과를 해결하기 위한 방안

0. switch case 교체

파이썬에서는 지원되지 않는 구문이므로 포기

1. 함수 삭제

사실 해당 내용에서의 함수는 큰 의미가 없어, 없어도 크게 영향을 받지 않음

2. input 변경

sys.stdin import

 

 

# 변경후

from sys import stdin

list = []
for _ in range(int(stdin.readline())) :
    cmd = stdin.readline().split()
    
    if cmd[0] == 'pop':
        if list : print(list.pop(0))
        else : print (-1)
    elif cmd[0] == 'push':
        list.append(cmd[1])
    elif cmd[0] == 'front':
        if not list: print(-1)
        else : print(list[0])
    elif cmd[0] == 'back':
        if not list: print(-1)
        else : print(list[-1])
    elif cmd[0] == 'empty':
        if not list: print(1)
        else : print(0)
    elif cmd[0] == 'size':
        print(len(list))
반응형
반응형

파이썬 2.xx 버전은 기본적으로 Ascii Code 형식이다.

3.7 버전까지 나온 마당에 굳이 2.x 버전을 쓰진 않겠지만..


컴퓨터에 기본으로 깔려있던 버전을 썼는데 그게 구버전이라면 에러를 내보낸다.....

틀린게 없는데 에러가 난다.....


ascii code는 한글을 지원할 수 없어서 생기는 인코딩 / 디코딩 문제라 해결 방법 정리해봄



해결 방법

1) #-*- encoding: utf-8 -*-

 - 파이썬 파일 맨위에 해당 줄을 입력하면 에러가 나지 않음

 - ascii Code를 UTF-8로 변환해서 인코딩해준다는 내용


2) setdefaultenconding() 설정

import sys 
reload(sys) 
sys.setdefaultencoding('cp949')


cp949로 기본 인코딩을 처리한다는 의미인데 cp949가 euc-kr이랑 똑같다고 생각하면 됨

cp949 대신 utf-8하면 에러가 난다는 이야기가 있다....

실제로 해보지는 않음


3) 출력할 문자열을 인코딩해서 사용

s = "안녕하세요"
print(type(s))
s2 = s.encode('utf-8')
print(type(s2))
s3 = u'안녕하세요'
print(type(s3))

이런 식으로 사용할 경우 다음과 같은 결과가 나오게 됨

<class 'str'>
<class 'bytes'>
<class 'str'>

물론 가장 좋은 방법은 최신 버전 언어 쓰기...


최신 버전 언어가 지원되는것도 많고 쓰기 편하다


3부터는 기본 인코딩 방식이 ascii 에서 UTF-8로 바꿔서 저런거 안해도 한글 입력하면 다 된다.


반응형

'Python > 자료' 카테고리의 다른 글

파이썬 Python] Django 설치(OS X)  (1) 2019.03.13
파이썬 Python] 한글 지원(ver: 2.XX)  (0) 2019.02.16

+ Recent posts