멈추지 않고 끈질기게
[기타][메모용] 코테에서 자주 나오는 실수 본문
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.
1. 오버플로우
- 숫자 변수들끼리 사칙연산 시, 결과물이 해당 자료형의 최대값을 넘길 수 있으므로 주의
#include <iostream>
using namespace std;
int main()
{
int a = 2000000000; // 20억
int b = 2000000000; // 20억
int c = a + b;
cout << c << endl;
}
2. 계산하기 전에 캐스팅
- 어떤 변수를 다른 변수들의 계산 결과로 초기화하는 경우, 우변의 피연산자들의 자료형에 영향을 받음
- ex) long long c = a * b의 경우, a와 b가 int라면 우변의 계산결과 또한 int 타입이므로 int의 최대값을 넘지 못함
#include <iostream>
using namespace std;
int main()
{
int a = 1000000000; // 100만
int b = 1000000000; // 100만
long long c = a * b;
cout << c << endl;
}
- 해당 이슈를 피하려면 피연산자 중 최소 하나 이상을 저장할 변수의 자료형으로 캐스팅할 것
#include <iostream>
using namespace std;
int main()
{
int a = 1000000000; // 100만
int b = 1000000000; // 100만
long long c = static_cast<long long>(a) * b; // 피연산자 캐스팅
cout << c << endl;
}
3. 제한 조건
- 일부 문제에서 윗단의 설명과 제한 조건이 일치하지 않는 경우가 있음
ex) 문제 설명: 중복 원소 가능
제한 조건: 중복되지 않은 원소로 이루어진 벡터
- 한번 놓치면 수렁에 빠지기 쉬우니 제한 조건은 꼭 잘 읽어보자
4. 불필요한 계산
- 불필요한 계산을 반복하지 않도록 종료 조건을 잘 설정하자
ex) 수익금 나누기 : 0원이 되면 더 이상 계산할 필요가 없으므로 break 해야 함. 누락 시 시간초과
5. 숫자 변환
- 값을 cin을 통해 입력받을 때, int와 같은 숫자 자료형으로 받는 경우 맨 앞자리가 0이라면 삭제됨
ex) 09081234 -> 9081234
- 앞자리의 0까지 살려야 하는 문제일 경우, 문자열로 받아서 저장
- 혹은 숫자 계산이 필요한 경우, 우선 숫자로 처리하고 출력 직전에 변환하는 방식을 고려할 것
'기타' 카테고리의 다른 글
[기타][메모용] 행렬의 변환 (0) | 2023.10.23 |
---|---|
[기타][메모용] 길찾기 관련 (0) | 2023.08.06 |
[Photon][저장용] IP 변경 시 설정 (0) | 2023.06.03 |
[기타][저장용] 어셈블리 언어 (0) | 2023.02.28 |
[기타] 모바일 디바이스의 특징 (0) | 2023.02.14 |