안녕하세요, 개발자 취업에는 거의 모든 기업에서 코딩 테스트를 본다고 합니다!
저는 비전공자로서 개발자 준비를 한지 이제 1개월정도 되어가는데요(회사에서 파이썬 강의만 몇 개 들음...)
한번 코딩테스트의 수학의 정서가 같은 백준 문제 100문제 푸는것을 목표로 준비해보겠습니다! (일주일에 2~3문제씩!)
글의 구조는 -> 문제 풀이 -> 나의 약점이 뭔지 복기(?)하는 순서입니다.
+) 문제풀기위한 게시글이므로 파이썬 문법 설명은 생략하였습니다.
추가로 실제로 문제를 풀면서 글을 쓰는 것이라 서체에 불편함을 느끼시더라고 너그러이 용서 부탁드립니다^_^
더 좋고 빠른 방법이 있다면 댓글로 알려주시면 감사드리겠습니다!
이번 시간에는 10828번을 풀어보겠습니다. (문제 링크 : 10828번 )
Command
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
생각해보기 :
-. 첫 input은 command를 몇 개 받아야 할지를 나타낸다.(n)
-. n번의 커맨드를 받아야 한다 → for문 사용
-. command들이 딱 정해져 있는(?) 단어들이므로 Boolean을 이용한 조건문을 사용하자!
-. 특이 Case 생각하기!
① top/empty/pop command는 리스트가 비워져 있을 때 -1을 출력해야 한다. → 조건문 안에 조건문 하나 더 적용!
② push command의 경우 input에 띄어쓰기와 숫자가 있다.
→ "push "는 나에게 필요 없는 것이다.(5번째 인덱스까지)
→ 리스트를 하나 만들어서 push뒤의 숫자만 저장하자! →리스트 슬라이싱 사용
-. 스택 가장 위에 있는 수 출력 → [-1] 인덱스를 출력하자!
Software 직군으로 들어온 회사 동기가 나에게 추천해준 방식(?)이다!
★★★문제를 보고 바로 코딩하지 말고 어떻게 풀지 생각부터 하기!!! (그 후 구현해도 늦지 않다!)
문제를 보고 어떻게 풀지 생각하면서 적어보니 정말 큰 그림을 그릴 수 있었다.
<내가 짠 코드> ---- 백준 홈페이지에서 런타임 에러 발생 ㅠㅠ
개선 필요 사항 및 배운 점!
위에 코드 처럼하면 백준 알고리즘 사이트 채점 시 런타임 에러가 발생한다..ㅠㅠ
구글링을 해보니 반복 문안에서 입력받을 때 input을 사용하면 런타임 에러가 발생한다고 한다.
(참고, 속도 : sys.stdin.readline > input() )
추가로, split()을 사용하면 리스트로 입력받게 된다는 것을 새로 배웠다!!
[split 괄호 안을 비워두면 띄어쓰기 기준으로 나누어진다]
위 코드에서 input을 sys.stdin.readline.split()으로 바꿔주고 command를 더 쉽게 리스트 형식으로 받아주자!
(그렇게 하면 list.append(int(command[5:])) 과 같은 더러운 코드를 안 써도 된다!)
<개선된 코드>
♠이 문제를 풀면서 느낀 점 및 개선사항
-. 첫 문제지만 나름 스스로 끝까지 코드를 짜 보아서 만족스럽다(비록 런타임 오류로 100프로 정답은 아니지만 ㅠㅠ)
-. 반복문에서 입력을 받는 거라면 무조건!! sys.stdin.readline()을 사용하자
-. split()을 사용하면 리스트로 입력을 받는다 ☆☆☆
'Python > 백준 문제' 카테고리의 다른 글
백준 알고리즘 문제_1406번 (0) | 2021.05.13 |
---|---|
백준 알고리즘 문제_1874번 (0) | 2021.05.05 |
백준 알고리즘 문제_9012번 (0) | 2021.05.04 |
백준 알고리즘 문제_9093번 (0) | 2021.05.03 |
댓글