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

이런 간결한 코드를 발견하고 감탄했다. 역시 세상은 넓고 똑똑한 사람은 많음..

그러니까 더 열심히 해야지!

 

참고 : 

 

[다시쓰는 C언어 강좌] 004 - 값을 담아두는 변수, 변수의 출력(2)

이번엔 여러 개의 변수를 쓰고 여러 가지 자료형의 변수를 사용해 봅시다. int a;int b; 이러면 a와 b라는 ...

blog.naver.com

 

백준 3052번 : 나머지 C++

[BOJ 3052번 나머지 문제](https://www.acmicpc.net/problem/3052) BOJ 3052번 나머지 문제 나머지를 체크하는 bool 배열[42]을 만들어서 true의 개수를 센다. 3052.cpp #include using namespace..

murra.tistory.com

 

반응형