# Enter your code here. Read input from STDIN. Print output to STDOUT
phone = {}
inputn = []
t = int(input())
i = 0
while i < t:
a, b = list(map(str, input().rstrip().split()))
phone[a] = b
i += 1
for _ in range(0, t):
inputn.append(str(input()))
for outputn in inputn:
if outputn in phone:
print("{}={}".format(outputn, str(phone[outputn])))
else:
print('Not found')
이렇게 작성하여 실행은 되었으나, 처음에 입력받은 t가 너무 값이 클 경우에는 error가 생겼다.
알고리즘 자체는 틀리지 않았다. 이유를 알 수가 없어 여기저기 알아보았는데, 대부분이 사람들이 작성한 코드가 전부 같은 error나 나왔다. 그래서 한 외국사이트에서 그 이유를 찾을 수 있었다.
문제를 자세히 읽어보면 n과 number of query 모두 10 ^ 5의 제약 조건이 있다.
N=int(input())
phoneBook={}
for _ in range(N):
name,contact=input().split()
phoneBook[name]=contact
try:
while(True):
check=str(input())
if check in phoneBook:
print(check+"="+phoneBook[check])
else:
print('Not found')
except(EOFError):
pass
이렇게 작성하면 해결 할 수 있다고 한다. try와 except를 사용하여 해결 할 수 있다고 한다.
try except문은 에러를 에러를 제어할 수 있는 예외처리 함수라고 한다.
N으로 입력받은 값만큼 휴대폰에 저장할 사람 이름과 그 사람의 전화번호를 저장할 수 있다.
name이 사람 이름 contact가 전화번호이다.
phoneBook이라는 Dictionary에 name : contact 로 저장한다.
while(True)라고 하면 그냥 무한반복이다.
check로 입력받은 문자가 phoneBook이라는 Dictionary에 포함되어 있다면
그것을 출력하는 것이다.
만약 내가 홍길동 12345678을 입력했고
check에 홍길동을 입력했다면
홍길동=12345678로 출력된다.
만약 내가 저장한 홍길동이 아니라 저장하지 않은 이순신을 입력했다면
Not found가 출력된다.
except(EOFError):
pass
를 사용함으로써 에러가 뜰경우 그냥 pass하도록 하였다.
blog.naver.com/dnjswls23/222166545874
파이썬(Python) 공부[12] - 예외처리 (try ~ except ~ finally), 예외 종류 (Exception)
예외처리파이썬(Python)에서 프로그램 에러가 발생했을 때, 에러를 핸들링하는 기능으로 try..except 문을...
blog.naver.com
이 사이트에서 에러의 종류들을 살펴볼 수 있었다. 위 사이트에서 알게된 내용은 다음과 같다.
베이스 클래스( 주로 다른 예외의 베이스 클래스로 사용) | |
BaseException | 모든 내장 예외의 베이스 클래스입니다. 사용자 정의 클래스에 의해 직접 상속되는 것이 아닙니다 (그런 목적이라면 Exception 사용). 이 클래스의 인스턴스에 대해 str() 이 호출되면, 인스턴스로 전달된 인자의 표현을 돌려줍니다. 인자가 없는 경우 빈 문자열을 돌려줍니다 |
Exception | 모든 시스템 종료 외의 내장 예외는 이 클래스에서 파생됩니다. 모든 사용자 정의 예외도 이 클래스에서 파생되어야 합니다. |
ArithmeticError | 다양한 산술 에러가 일으키는 내장 예외들의 베이스 클래스 |
BufferError | 버퍼 관련 연산을 수행할 수 없을 때 발생합니다. |
LooupError | 매핑 또는 시퀀스에 사용된 키나 인덱스가 잘못되었을 때 발생하는 예외 |
구체적인 예외 (일반적으로 직접 일으키는데 사용) | |
AssertionError | assert 문이 실패할 때 발생 |
AttributeError | 어트리뷰트(Attribute) 참조나 대입이 실패할 때 발생 |
EOFError | input() 함수가 데이터를 읽지 못한 상태에서 EOF (end-of-file) 조건을 만날 때 발생 |
GeneratorExit | 제너레이터 또는 코루틴(coroutine)이 닫힐 때 발생 |
ImportError | import 문이 모듈을 로드한 데 문제가 있을 때 발생 |
ModuleNotFoundError | ImportError 의 서브 클래스로, 모듈을 찾을 수 없을 때 발생 |
IndexError | 시퀀스 인덱스가 범위를 벗어날 때 발생 |
KeyError | 매핑(딕셔너리) 키가 기존 키 집합에서 발견되지 않을 때 발생 |
KeyboardInterrupt | 사용자가 인터럽트 키(일반적으로 Control-C 또는 Delete)를 누를때 발생 |
MemoryError | 작업에 메모리가 부족하지만, 상황이 여전히 복구될 수 있는 경우 발생 |
NameError | 지역 또는 전역 이름을 찾을 수 없을 때 발생 |
NotImplementedError | RuntimeError에서 파생된 예외로, 사용자 정의 베이스 클래스에서 파생 클래스가 재정의하도록 요구하는 추상 메서드나, 클래스가 개발되는 도중에 실제 구현이 추가될 필요가 있음을 나타낼 때 발생 |
OSError | 시스템 함수가 시스템 관련 에러를 돌려줄 때 발생 |
OverflowError | 산술 연산의 결과가 너무 커서 표현할 수 없을 때 발생 |
RecursionError | RuntimeError에서 파생된 예외로, 인터프리터가 최대 재귀 깊이를 초과하였음을 감지할 때 발생 |
ReferenceError | weakref.proxy() 함수가 만든 약한 참조 프록시가 이미 가비지 수집된 참조 대상의 어트리뷰트를 엑세스하는 데 사용될 때 발생 |
RuntimeError | 다른 범주에 속하지 않는 에러가 감지될 때 발생 |
SyntaxError | 파서가 문법 오류를 만날 때 발생 |
IndentationError | 잘못된 들여쓰기와 관련된 문법 오류의 베이스 클래스 |
TabError | 들여쓰기가 일관성없는 탭과 스페이스 사용을 포함하는 경우 발생 |
SystemError | 인터프리터가 내부 에러를 발견했지만, 상황이 심각해 보이지 않을 때 발생 |
SystemExit | sys.exit() 함수가 일으키는 예외 |
TypeError | 연산이나 함수가 부적절한 형의 객체에 적용될 때 발생 |
UnboundLocalError | 함수나 메서드에서 지역 변수를 참조하지만, 해당 변수에 값이 연결되지 않으면 발생 |
UnicodeError | 유니코드 관련 인코딩 또는 디코딩 에러가 일어날 때 발생 |
UnicodeEncodeError | 인코딩 중에 유니코드 관련 에러가 일어나면 발생 |
UnicodeDecodeError | 디코딩 중에 유니코드 관련 에러가 일어나면 발생 |
ValueError | 연산이나 함수가 올바른 형이지만 부적절한 값을 가진 인자를 받았고, 상황이 IndexError 처럼 더 구체적인 예외로 설명되지 않는 경우 발생 |
ZeroDivisionError |
나누기 또는 모듈로 연산의 두 번째 인자가 0일때 발생 |
'Hacker rank Challenge > python' 카테고리의 다른 글
30 Days Challenge 10일차 (0) | 2021.01.26 |
---|---|
30 Days Challenge 9일차 (0) | 2021.01.25 |
30 Days Chellenge 7일차 (0) | 2021.01.23 |
30 Days Chellenge 6일차 (0) | 2021.01.22 |
30 Days Challenge 5일차 (0) | 2021.01.21 |