728x90
문제 3052번
https://www.acmicpc.net/problem/3052
어제 풀었던 문제와 비슷하게 풀면 될 것 같다. 42로 나눈 나머지니까 0~41까지 나올 수 있다. 그러므로 크기가 42인 배열을 하나 만들어주고 각 입력값에 42를 나눈 나머지를 배열의 인덱스값으로 넣어 1씩 증가시켜준다. 그리고 배열에 들어있는 값이 0이 아니라면 count를 해준다. 그렇게 해주면 한 번 이상 나온 경우를 구할 수 있다.
#include <iostream>
using namespace std;
int main() {
int num[42] = {0};
int A, count = 0;
for (int i = 0; i < 10; i++) {
cin >> A;
num[A % 42]++;
}
for (int i = 0; i < 42; i++) {
if (num[i] != 0) {
count++;
}
}
cout << count;
return 0;
}
그런데 0이 아닌 개수를 count할 때 :를 사용하는 것이 더 좋은 것 같아서 내 풀이를 다시 고쳐봤다.
#include <iostream>
using namespace std;
int main() {
int num[42] = {}; //공백이어도 0으로 초기화
int A, count = 0;
for (int i = 0; i < 10; i++) {
cin >> A;
num[A % 42]++;
}
for (int v:num) {
if (v>0) {
count++;
}
}
cout << count;
return 0;
}
문제 11720번
https://www.acmicpc.net/problem/11720
공백을 주지 않고 숫자를 입력받았기 때문에 string으로 입력받아서 각 자리수를 아스키 코드를 이용해 int로 변환하여 더해줬다(공백이 입력으로 들어오는 순간 문자열의 끝이라고 판단하여 입력을 받지 않음).
문자열 '0'의 아스키 코드는 48이므로 int로 변환하기 위해서는 -'0'또는 -48을 해주면 된다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int N, cnt=0;
string s;
cin >> N >> s;
for (int i = 0; i < N; i++) {
cnt += s[i] - '0'; //string을 int로 변환
}
cout << cnt;
return 0;
}
만약 char로 받는다면 한글자씩 받는 것이니 string으로 받을 때처럼 s[i]하는 것이 아니라 다음과 같이 작성하면 된다.
#include <iostream>
using namespace std;
int main() {
int N, cnt=0;
char c;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> c;
cnt += c - '0'; //char형을 int로 변환
}
cout << cnt;
return 0;
}
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 1159번 - 농구 경기 (2) | 2024.04.01 |
---|---|
[C++] 백준 1152번 - 단어의 개수 (0) | 2024.03.31 |
[C++] 백준 2577번 - 숫자의 개수 (0) | 2024.03.30 |
[C++] 백준 1120번 - 문자열 (0) | 2024.03.28 |
[C++] 백준 27866번 - 문자와 문자열 (0) | 2024.03.27 |