BOJ에서 다음 문제들을 쭉 순서대로 풀어본다. boj.kr/문제번호 <= 형태로 검색하면 된다.
입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992
입출력 문제들을 풀 때 10분이상 이 문제를 붙들고 있는 경우, 그건 입출력에서 뭔가 모르는 부분이 반드시 있다는 뜻이므로 이전 질문들을 무조건 찾아보고 다른 사람이 푼 코드를 반드시 봐야 한다.
내가 애용하는 IDE 사이트
(IDE 자동 완성이 불가능하기 때문에 사용하는 중)
문제 :
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
입력 :
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
출력 :
입력으로 주어진 숫자 N개의 합을 출력한다.
내가 생각한 풀이 순서
1. 배열에 넣을 수 있을까? -> 흠... 하나씩 떼어서 받을 수 있는 방법이 있나..?
2. 입력 받은 후, 숫자 하나씩 더해주는 함수가 따로 있을까?
..
3. 검색 및 다시 생각
검색해보니 문자로 저장 후에 다시 숫자로 저장하는 방법이 대부분이었다.
(넘 신박한 방법... 처음 생각해낸 사람 정말 똑똑이....)
1. N을 입력 받는다.
2. 문자열을 입력받는다.
3. 반복문을 이용 -> 1부터 N까지 문자를 숫자로 바꿔 sum에 더한다.
4. sum을 출력한다.
하지만...
난 이렇게 말고 다른 방식으로 풀고 싶었다.
.. 문자 저장 -> 다시 숫자로 변환 -> 더함.
이렇게하는 방법이 '굳이 이렇게?'라는 생각이 들었기 때문.
따라서
숫자를 여러 개 받았을 때,
다시 하나씩 떨어뜨려서 저장 후 더하는 방식을 선택했다.
정답 코드
#include <iostream>
using namespace std;
int main() {
int testcase = 0, result = 0;
cin >> testcase;
int number[testcase] = {0};
for(int i =0; i < testcase; i++){
scanf("%1d", &number[i]);
result += number[i];
}
cout << result;
return 0;
}
cin 다음 number을 선언한 게 마음에 들지 않지만...( 바로 size 100으로 초기화해도 될 듯하다. 어차피 입력받은 사이즈만큼 도니깐... 그치만 100을 첨부터 초기화 하기엔... 흠.. )
"%1d"로 하나씩 받아서 바로 더해버렸다.
#다른 방식의 코드
#include <iostream>
using namespace std;
int main() {
int N = 0, sum = 0;
char number[100];
cin >> N >> number;
for(int i =0; i < N; i++){
sum += number[i] - '0';
// 숫자(char)는 ASCII코드 48부터 시작하므로 -48을 해주면 숫자를 얻을 수 있지만,
// -0 또한 문자 -> 숫자로 바꿔준다.
}
cout << sum;
return 0;
}
아래 ASCII TABLE을 살펴보면,
CHAR형 0이 48임을 확인할 수 있다.
'OLD_알고리즘 > Baekjoon' 카테고리의 다른 글
백준] 2741 : N 찍기 (0) | 2020.07.11 |
---|---|
백준] 11721 : 열 개씩 끊어 출력하기 (0) | 2020.07.11 |
백준] 11719 : 그대로 출력하기 (2) (0) | 2020.07.11 |
백준] 11718 : 그대로 출력하기 (0) | 2020.07.11 |
백준] 11022 : A+B (8) (0) | 2020.07.11 |
댓글