오늘은 백준 27866번에 대해 잠깐 풀이하고자 한다!

처음 문제를 받고 시도한 접근 방법!!

 

1. 리스트를 만들고 input함수로 받는다 -> 이것을 split 함수를 사용해 분리한 뒤 리스트 인덱스를 출력하면 문제해결!!

이라고 생각해서 시도한 코드가 바로 아래..

eng = list()
eng = input().split()
num = int(input())

print(eng[num-1])

근데 이렇게 하니 IndexError가 생긴다

처음에는

print(eng[num])

이라고 적어서 인덱스 범위 초과 오류가 생긴 줄 알았는데 (index는 0부터 시작하니까) num-1로 수정해도 같은 오류가 생기는 것을 보고 이상함을 감지했다

 

그래서 split에 관한 레퍼런스를 찾아본 결과.....-> 공백과 다른 특수기호 등 다양한 것들을 포함한 상황에선 분리할 수 있지만 자간을 분리하는 상황은 찾아볼 수 없었다..

이론적으로는 split함수를 사용해 리스트에 글자 하나씩 넣으면 된다고 생각했는데 이게 아니었다

 

답은 바로 input을 리스트로 받으면 된다!!
str = list(input())

이런 식으로 리스트로 input 받게 되면 아래처럼 알아서 리스트 인덱스 하나하나에 자동으로 넣어준다

만약 "안녕하세요! 해코딩입니다"를 입력 받았다면

['안', '녕', '하', '세', '요', '!', ' ', '해', '코', '딩', '입', '니', '다']

이렇게 자동으로 리스트에 하나씩 들어간다

그럼 이제 문제 해결 가능!!

이처럼 "안녕하세요! 해코딩입니다"를 입력하고 숫자 8을 입력하면 eng[8-1]의 인덱스인 eng[7]가 출력되어 "해"가 출력된당

헤헤 해결완료!! 기본부터 튼튼히 다져야겠어용 감사합니당

(오류나 더 좋은 해결방법 있으면 말해주세요!)

다른 언어에서는

for( ; ; )

이런 식으로 조건 안 주면 무한 반복이 됐는데 파이썬에서는 while 문에서만 무한 반복이 가능한게 은근히 불편했당..

그래서 다른 방법이 없나..싶어서 찾아본 결과 

list_test = [1]
for i in list_test:
    list_test.append(i + 1)
    print(x)

이런 식으로 리스트에 요소를 계속 추가하면 무한반복을 사용할 수 있었당..

근데 사실상 이렇게까지 복잡하게 for문 사용하느리 마음 편하게 while문 쓰는게 나을듯...

그래도 파이썬에서도 for문으로 무한반복이 가능하다는 것에 의의를 두는 걸로 ^^

 

다음은 end 함수이다

end = ''

이런 식으로 end를 사용하면 다음 print 함수를 사용할 때 end부분부터 이어서 사용 가능하다

예시로 오늘 내가 작성한 간단한 코드를 보자면

요런 식으로 이어서 쓸 수 있어서 더욱 간단하게 코딩할 수 있다

조건부 표현식 사용해서 더 간단하게 작성해봤당 파이썬에서는 삼항연산자 대신 조건부연산자를 사용하나 보다

핳 오늘도 유익한 공부 보람차다~

백준 10951번

너무나도 쉬운 문제인데 당황했다

그냥 정수 2개를 입력 받고 더한 값을 출력하면 그만인 "Hello World"급의 문제인데 오류가 발생한 것이다..

하! 자존심 상했지만 그렇다고 넘어가면 안 되니까..!


문제 파악!!

입력의 수가 정해진 것이 아니라 계속해서 받는 형식이다

그래서 while 문을 사용하고 조건을 True로 주어 무한루프를 작성해 계속해서 입력을 받을 수 있도록 코딩한 결과..!

보이십니까... 수많은 런타임 에러 ^^

 

그럼 이걸 어떻게 해결해줘야 하나 고민하다 input() 대신에 sys.stdin.readline() 함수를 사용하면 괜찮다는 말을 접수!

그래서 실행한 결과-> 얘는 그냥 입력 창도 안 떠요...뭐지...? 아시는 분 있으시면 말 좀 해주세요 ㅠ

 

무튼 얘도 아닌 거 같아서 다시 구글링~~ 하다가 발견!

바로바로 예외처리를 해주면 된다고 합니다!

기존 while 문에서

while True:
    try:
    	print("Have a good day!")
    except:
    	break

except: break 이 코드를 추가해주면 해결! (위처럼)

바로 요렇게요 그럼 저 except에서 에러가 발생하면 break로 while문을 벗어나게 돼서 무한루프에서 나올 수 있게 되죠

그렇기 때문에 런타임 에러도 안 나오고요!

그리고 이전에 실행한 얘도 예외처리해주니까 OJ에서는 정답으로 처리돼요...이유가 알고 싶따....

무튼 이렇게 예외처리를 해주면 런타임 에러(EOFError)에서 쉽게 벗어날 수 있답니다^^ 야호

sys.stdin.readline() 함수 사용하다가 실패한 흔적 ㅋㅋㅋㅋ

이렇게 무한루프로 인해 생기는 런타임 에러 해결 방법에 대해 공부했습니당

이건 유용하게 써먹을 것 같아욤 지식이 늘었따! 예외처리만 해주면 된다니 별거 아니잖아~

그럼 모두 열공하세요

+ Recent posts