본문 바로가기

Algorithm/BOJ

[백준/5597/c++] 과제 안 내신 분..?

https://www.acmicpc.net/problem/5597

 

 

단계별로 풀어보기 격파 중ㅎ

 

배열[Array]

  정적 배열 동적(할당) 배열
정의 크기가 미리 정해짐 크기가 미리 정해지지 않음
선언 데이터타입 배열이름[배열크기];
ex. int num[10];
< 방법1 >
new 키워드 사용

< 방법 2 >
std::vector 사용
초기화 < 방법1 - 선언과 동시에 초기화 >
ex.  int num[10] = {0, };
bool arr[3] = {true, true, false};

< 방법2 - 선언 후 인덱스로 초기화 >
ex. num[0] = 1;
arr[2] = true;
< 방법1 - new 키워드 >
new 키워드를 사용하면 개별 객체 또는 배열을 동적으로 할당하여 '직접' 메모리를 관리해야한다

<방법2 - std::vector 키워드 >
'std::vector' 클래스는 표준 라이브러리에서 제공되는 동적배열로 메모리 관리를 '자동'으로 처리해준다

 

이번 문제는 배열의 크기가 미리 정해져 있었기 때문에 정적배열을 사용했다.

몰랐다가 새로 알게 된 부분은 이것이다!

 

// 배열의 모든 값 0으로 초기화 : 가능
int student[30] = {0, };

// 배열의 모든 값 -1로 초기화 : 불가능
int student[30] = {-1, };
// 첫 원소 값만 -1로 초기화 되고, 나머지는 0으로 초기화 됨.

 

배열의 원소값을 모두 -1로 초기화하고 출석 불린 친구들을 0으로 값을 변경해줘서 -1인 친구만 찾으려다가 실패!

 

 

 

 

 

#include <iostream>
#include <vector>

using namespace std;

int main(){
  int student[31] = {0, };

  for(int i=0; i<28; i++){
    int num;
    cin >> num;
    student[num] = 1;
  }

  for(int i=1; i<31; i++){
    if(student[i] == 0){
      cout << i << endl;
    }
  }
  
}

 

 

 

 


<번외>

나는 아직 c++을 제대로 공부하지는 않았고, 예전에 수업에서 대충 사용해봤던 기억과 다른 언어를 써봤던 감을 살려서

느낌대로 하느라 c++의 언어 특성을 살려 코드를 짜지 못하고 있는 중이다

 

같이 스터디하는 친구가 동적할당에서 vector를 써먹길래 자연스럽게 쓰다가 배열 다시 알아보면서 위에처럼

new와 vector의 차이를 얕게 알게되었다!

 

나중에 좀 더 깊게 알아보면 좋을듯!

 

 

 

 

[참고 블로그]

https://bb-dochi.tistory.com/6

 

[c/c++] 배열 한번에 초기화하는 법

일단 0으로 초기화하는 방법은 int array[10] = {0,}; 그럼 다른 값으로 초기화 하려면 int array[10] = {5,}; 가 될까 싶었는데, 결론적으론 안된다. (첫 원소값만 5가 되고 나머지는 0으로 초기화 된다) 그럼

bb-dochi.tistory.com

https://wn42.tistory.com/87

 

[C++] 배열(Array)

배열 같은 타입의 변수들로 이루어진 유한 집합 배열 선언 배열은 다음과 같이 선언한다. datatype name[/*# of data*/]; 배열을 정의하면서, {} 중괄호를 이용하여 초기화를 동시에 진행할 수 있다. 배열

wn42.tistory.com