-
C++ 변수 여러개를 선언과 동시에 초기화 할 때 주의할 점Knowledge/C++ 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이라고 선언하면서 각각 초기화해야한다.
포스팅 끝.
을 이렇게 내기는 아쉬우니 코드 하나 덧붙이자면
나는 위의 초기화 이슈를 해결한 후 아래와 같이 코딩해서 문제를 풀었는데
1234567891011121314151617181920212223242526272829303132333435363738394041424344#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;// 중복값 체크용 변수 tempfor(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 다른 분들 코드를 보다가
12345678910111213141516171819#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 이런 간결한 코드를 발견하고 감탄했다. 역시 세상은 넓고 똑똑한 사람은 많음..
그러니까 더 열심히 해야지!
참고 :
반응형'Knowledge > C++' 카테고리의 다른 글
comparison between signed and unsigned integer expressions 원인 및 해결 방법 (0) 2019.07.16 C++ sizeof() 함수와 strlen()의 차이 (1) 2019.07.16 C++ 최소값과 최대값을 구하는 함수 (0) 2019.07.16 C++ EOF 처리 방법 ( 백준 10951 A+B - 4 ) (6) 2019.07.11 문자열을 출력하고 줄을 바꿔주는 puts() 함수 (0) 2019.07.08