백준 문제를 풀 때 최대 입력값을 사용해서 벡터의 생성과 동시에 크기를 할당해주는 경우가 있다.
vector<int> cards(100);
이런 식으로 생성하면 cards 벡터는 사이즈가 100이 된다.
그런데 코드를 짜는 중간에 cards.size()를 사용했다?
그렇다면 당신은 찾기 어려운 오류 속으로 빠져들었다. (초보이면 화가 솟구치는 자신을 발견하게 된다)
입력받는 테스트 케이스에서 card의 갯수가 5개나 8개로 주어질 수 있다.
for (int i = next; i < cards.size(); i++)
이런 반복문을 짜게 된다면?
있지도 않은 카드 값으로 반복문을 돌리고 있게 된다.
그리고 당연히 예상한 시간보다 계산이 훨씬 더 오래 걸린다. 당근 답도 이상한 답이 나온다.
결론
1. 벡터 생성과 동시에 크기를 결정해줬다면 반복문에서는 vec.size()를 쓰지 말아야 한다.
대신 배열의 갯수를 입력받은 N을 사용한다.
2. 벡터 생성과 동시에 크기를 결정해주는 게 싫다면 vec.push_back()으로 하나하나 집어넣자. 그러면 크기는 입력받은 데이터 갯수가 된다. vec.size()를 사용해서 코드를 짜도 논리 오류는 발생하지 않을 것이다.
넋두리
언제쯤 이런 실수를 안 하는 날이 올까? 실수 좀 그만 하고 싶다. 아까운 디버깅 시간.....
'백준 > 이걸 몰랐네' 카테고리의 다른 글
인덱스를 통한 배열 접근 시 항상 조심하자 (0) | 2020.09.17 |
---|---|
[c++]std::list::erase() 함수 사용 시 반환 값을 사용하자 (0) | 2020.09.09 |
예제 입출력은 분명 맞는데 틀렸다고 할때 대처법 (0) | 2020.08.31 |
배열을 fill()로 초기화해주자. (0) | 2020.08.31 |
백준 11720번 숫자의 합(문자로 안 받고 정수로 받기) (0) | 2020.08.30 |