Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 향상된for문
- 성장형마인드셋
- 백준
- Java
- string메서드
- 제너릭메서드
- 네이티브애플리케이션
- 재귀적사고
- 동전교환알고리즘
- 프로그래머스
- 루트사용자
- 날씨API
- ChatGPT
- SQL
- API
- 스레드동기화
- API명세서
- staging_area
- 배열탐색
- 참조변수타입변환
- 스프링
- 99클럽
- SQ3R
- Spring
- 4A피드백
- 자바
- 파일사용권한
- 프로젝트
- 코딩테스트
- openapi
Archives
- Today
- Total
개발 공부용
[백준] 17608 - 막대기 본문
문제 출처 : https://www.acmicpc.net/problem/17608
문제
높이만 다르고 모양이 같은 막대기를 일렬로 세우고 왼쪽부터 차례로 번호를 붙였다.
오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다.
N개의 막대기에 대한 높이 정보가 주어질 때 오른쪽에서 몇 개가 보이는지 알아내라.
입력
- 첫 번째 줄은 막대기의 개수 N(2<=N<=100,000)
- 두 번째 줄부터 N줄동안 막대기의 높이 h(1<=h<=100,000)
출력
- 보이는 막대기의 개수
풀이 방법
- 배열에 모든 막대기를 순서대로 넣는다.
- 맨 위에 것부터 한 개씩 뺀다.
- 막대기를 빼면서 가장 높은 막대기의 길이를 갱신할 때마다 보이는 막대기의 개수를 +1한다.
작성한 코드
import sys
N = int(sys.stdin.readline().strip())
stick = []
count = 1
for _ in range(N):
stick.append(int(sys.stdin.readline().strip()))
origin = stick.pop()
for _ in range(N-1):
present = stick.pop()
if(present>origin):
origin=present
count+=1
print(count)
처음에는 stick.append 부분에 int 타입 변환을 빼먹어서 틀렸다.
vscode로 풀고 입출력 테스트 후 제출했기 때문에 뭘 잘못했나 한 10분은 고민했다.
뭔가 놓친 게 있나 싶어서 제시되지 않은 다른 테스트 케이스도 해봤지만 vscode에선 여전히 잘 되었다.
코드를 조금 수정하고 다시 실행했을 때 타입 에러가 발생하여 잘못한 부분을 깨달았다.
조금만 찬찬히 살펴봤으면 금방 찾았을 것 같다.
테스트는 통과했는데 왜 안될까에 너무 의문을 가진 것 같다.
파이썬은 문자열 비교가 가능하기 때문에 기존 코드 자체로는 에러가 발생하지 않고 작동하는 것이 맞다.
다만 문자열 비교는 사전식 순서로 진행되어 2>10이 되므로 숫자 비교 시에는 형변환이 꼭 필요하다.
제시된 테스트 케이스와 내가 만든 테스트 케이스 모두 10 이상의 수가 입력에 존재하지 않았기 때문에
잘못된 코드임에도 정답이 출력되었던 것이었다.
10 이상의 수가 입력에 주어지면 당연히 틀린 답을 출력했다.
테스트 케이스의 중요성을 온몸으로 느낄 수 있었다.
'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글
[백준] 26043 - 식당 메뉴 (0) | 2025.02.07 |
---|---|
[백준] 10845 - 큐 (0) | 2025.02.06 |
[백준] 10828 - 스택 (0) | 2025.02.04 |
[백준] 32953 - 회상 (0) | 2025.01.24 |
[백준] 31562 - 전주 듣고 노래 맞히기 (0) | 2025.01.24 |