글을 시작하며
코딩테스트를 처음 입문하기 전에 필수로 풀어보면 좋은 코드업의 파이썬 기초 100제가 있다
혹시 모른다면 정말 강추!이니 꼬옥 풀어보길 바란다. 기초를 다잡기에 아주 좋다.
https://codeup.kr/problemsetsol.php?psid=33
수행 시간은 중요하다
코딩테스트 문제를 풀어본 사람이라면 수행 시간이 오래 걸려 통과하지 못한 경험이 있을 것이다.
당연함!
코딩테스트는 답만 나오면 장땡!이 아닌 그 풀이 과정의 중요도 역시 상당한 시험이기 때문이다.
풀이에 사용하는 알고리즘에 따라 수행 시간을 많이 단축시킬수 있고, 그래서 코딩테스트 공부는 알고리즘 공부와 꼭 병행되어야 한다.
(필자도 학부시절..이후로 오랜만에 알고리즘을 꾸준히 공부중이다. 꼭 코딩테스트가 아니어도 개발자에게 중요한 역량이다.)
그래서 무슨 말이 하고 싶냐면... 본론 들어갑니다.
코드업 파이썬 기초 100제 6056번은 논리연산에 관한 문제이다.
2개의 정수값이 입력될 때,
그 불 값(True/False) 이 서로 다를 때에만 True 를 출력하는 프로그램을 작성해보자.
이 문제를 두가지 코드로 풀었는데 당연히 수행시간이 같을 줄 알았으나 13ms 차이가 났다.
그리 드라마틱한 차이는 아니지만 갑자기 궁금했다.
이 단순한 두 코드는 왜 수행시간에 차이가 날까? 가 궁금해졌다.
혹시 이런 작은 차이라도 궁금해 할 누군가를 위해 기록을 남겨본다.
a, b = map(int, input().split())
print((bool(a) and not bool(b)) or (not bool(a) and bool(b)))
1번 코드는 문제 그대로를 코드로 옮겨놓았다. 두 줄짜리의 아주 간단한 코드이다.
코드 길이:97 byte(s) / 수행 시간:36 ms / 메모리 :27724 kb
a, b = map(int, input().split())
aa = bool(a)
bb = bool(b)
print((aa and not bb) or (bb and not aa))
2번 코드는 좀 더 풀어썼다. 변수명은.. 대충 지었다..!
코드 길이:103 byte(s) / 수행 시간:23 ms / 메모리 :27724 kb
코드는 더 길지만 수행시간은 더 짧았다.
내 눈에는 별 차이가 없는 코드인데 어째서 시간차이가 발생하는지 궁금해졌다.
결론적으로는 2번 코드는 형변환을 먼저 수행 후 논리 연산이 일어나고, 1번 코드는 논리연산 안에서 형변환이 일어나기 때문이다.
사실 13ms는 작은 시간 차이라서 성능에는 큰 영향을 주지 않는다. 그러므로 개인의 선호나 코딩스타일에 따라 코드를 작성하면 된다.
참고로 내 평소 코딩스타일은 2번이다. (그래야 내가 읽기 편함)
아무튼 궁금했는데 해결 완.
'💻dev > 🐍Python' 카테고리의 다른 글
Python | 파이썬 문자열을 찾고 인덱스를 반환해주는 find() 함수 (0) | 2023.04.02 |
---|---|
Python | 파이썬에서 아스키코드 - 문자 변환 방법, ord(), chr() (0) | 2023.04.02 |
Python | 파이썬 비트연산자, 삼항연산자 헷갈리지 말자! (0) | 2023.03.28 |
Python | 파이썬 내장함수 any와 all을 아십니까? (0) | 2023.03.28 |
Python | 파이썬 출력 - 값 변환 (8진수, 16진수, 반올림, 비트시프트, 유니코드) (0) | 2023.03.26 |