728x90
코딩 테스트 연습 문제에서 자주 볼 수 있는 문자열을 정수로 바꾸는 문제입니다.
문제
문자열로 주어지는 숫자 A를 정수형으로 바꾸어 출력하라.
(단, -9999 ≤ A ≤ 99999)
입력
+1111
-191
-5802
85930
출력 (자료형이 달라진다)
1111
-191
-5802
85930
아이디어
조건 확인 : A는 최대 5자리의 양수, 최소 4자리의 음수이다.
char 자료형으로 주어지는 문자열 A는 +/- 기호와 (없을수도있고) 숫자로 이루어져 있다.
문자열의 0번 인덱스에는 다음과 같은 것이 올 수 있다.
+ / - / 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9
여기서 주의해야 할 문자는 - (마이너스 기호) 하나 뿐이다.
해법
CASE 1 : 0번 인덱스(첫 번째 자리)에 - (마이너스 기호) 가 있는 경우
1) 이 숫자는 음수다.
2) 전체 길이가 len 이라면, 숫자는 1번 인덱스부터 len-1 까지이며, 자릿수는
10의 (len-2)제곱, 10의 (len-3)제곱, ... , 10의 0제곱 이다.
CASE 2 : 0번 인덱스(첫 번째 자리)에 + (플러스 기호) 가 있는 경우
1) 이 숫자는 양수다.
2) 전체 길이가 len 이라면, 숫자는 1번 인덱스부터 len-1까지 이며, 자릿수는
10의 (len-2)제곱, 10의 (len-3)제곱, ... , 10의 0제곱 이다.
CASE 3 : 0번 인덱스(첫 번째 자리)에 기호가 없는 경우
1) 이 숫자는 양수다.
2) 전체 길이가 len 이라면, 숫자는 0번 인덱스부터 len-1까지 이며, 자릿수는
10의 (len-1)제곱, 10의 (len-2)제곱, ... , 10의 0제곱 이다.
2) 의 내용을 구현하는 아이디어
A가 -9876 일 때 | A가 +9876 일 때 | A가 9876 일 때 |
정수형 answer 를 0으로 초기화한다. answer 에 1번 인덱스의 값을 더한다. answer = 9 answer 에 10을 곱한 후 2번 인덱스의 값을 더한다. answer = 98 answer 에 10을 곱한 후 3번 인덱스의 값을 더한다. answer = 987 answer 에 10을 곱한 후 4번 인덱스의 값을 더한다. answer = 9876 answer를 음수로 바꾼다. answer = -9876 |
정수형 answer 를 0으로 초기화한다. answer 에 1번 인덱스의 값을 더한다. answer = 9 answer 에 10을 곱한 후 2번 인덱스의 값을 더한다. answer = 98 answer 에 10을 곱한 후 3번 인덱스의 값을 더한다. answer = 987 answer 에 10을 곱한 후 4번 인덱스의 값을 더한다. answer = 9876 |
정수형 answer 를 0으로 초기화한다. answer 에 0번 인덱스의 값을 더한다. answer = 9 answer 에 10을 곱한 후 1번 인덱스의 값을 더한다. answer = 98 answer 에 10을 곱한 후 2번 인덱스의 값을 더한다. answer = 987 answer 에 10을 곱한 후 3번 인덱스의 값을 더한다. answer = 9876 |
정답 코드
int main(void) {
char* s = "-1234"; // 입력값 예시
int len = sizeof(s); // len = 5
int answer = 0;
if(s[0] == '-') {
for (int i = 1; i < len; i++) {
answer = answer * 10 + s[i];
}
answer = answer * -1;
} else if(s[0] == '+') {
for (int i = 1; i < len; i++) {
answer = answer * 10 + s[i];
}
} else {
for (int i = 0; i < len; i++) {
answer = answer * 10 + s[i];
}
}
printf("%d", answer);
return 0;
}
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 대문자를 소문자로, 소문자를 대문자로 (0) | 2021.04.07 |
---|