Knowledge/C++
C++ 변수 여러개를 선언과 동시에 초기화 할 때 주의할 점
TakeKnowledge
2019. 7. 16. 10:29
반응형
BOJ 3052번 문제 ( https://www.acmicpc.net/problem/3052 )를 풀다가 알게된 것
포스팅하기도 민망하지만 아무튼 이것때문에 틀렸으니 포스팅하면서 복기해본다.
C++관련해 대충 훑어보면서 int a,b,c = 0; 이렇게 선언하면 a,b,c 모두 0으로 초기화 되는 걸로 이해했는데 그렇지 않다
위와 같이 선언했다면 c만 0으로 초기화 되고 a,b는 초기화 되지 않은 상태다
만약 위와 같이 한줄에 다 선언하면서 다 초기화 시키고 싶다면
int a=0,b=0,c=0이라고 선언하면서 각각 초기화해야한다.
포스팅 끝.
을 이렇게 내기는 아쉬우니 코드 하나 덧붙이자면
나는 위의 초기화 이슈를 해결한 후 아래와 같이 코딩해서 문제를 풀었는데
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <stdio.h>
int main(void)
{
int input,temp;
int answer = 0;
int arr[10] = {};
for(int i=0; i<10;i++){
scanf("%d",&input);
arr[i] = input%42;
// 값을 입력받고 42로 나눈 나머지를 배열에 저장
}
for(int i=0;i<10;i++){
temp = 0;
// 중복값 체크용 변수 temp
for(int j=0; j<10;j++){
// 이중 포문으로 배열을 검사해서
if(arr[i]==arr[j]){
// 같은 게 있으면
temp++;
// 임시값을 증가시키는데
if(temp>1){
arr[j] = 42;
// 임시값이 1이상일 경우 배열의 j번째 칸은 42
//( 42로 나머지 연산을 하기에 임의로 넣지 않으면 나올 수 없는 수 ) 를 집어넣는다
}
}
}
}
// 배열을 다시 한번 돌려서
for(int i=0; i<10;i++){
// 값이 42가 아닌 경우만
if(arr[i]!=42){
answer++;
// 정답값을 증가시킨다
}
}
printf("%d",answer);
}
|
cs |
다른 분들 코드를 보다가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <bits/stdc++.h>
using namespace std;
bool check[42];
int main() {
int n = 10;
while (n--) {
int input;
cin >> input;
check[input % 42] = true;
}
int result = 0;
for (int i = 0; i < 42; i++) {
if (check[i]) {
result++;
}
}
cout << result;
}
|
cs |
이런 간결한 코드를 발견하고 감탄했다. 역시 세상은 넓고 똑똑한 사람은 많음..
그러니까 더 열심히 해야지!
참고 :
반응형