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
[C++] 배열(Array)
배열 같은 타입의 변수들로 이루어진 유한 집합 배열 선언 배열은 다음과 같이 선언한다. datatype name[/*# of data*/]; 배열을 정의하면서, {} 중괄호를 이용하여 초기화를 동시에 진행할 수 있다. 배열
wn42.tistory.com
'Algorithm > BOJ' 카테고리의 다른 글
| [백준/10809/c++] 알파벳 찾기 (0) | 2024.02.13 |
|---|---|
| [백준/11720/c++] 숫자의 합 (0) | 2024.02.12 |
| [백준/27433/c++] 팩토리얼 2 (1) | 2024.02.05 |
| [프로그래머스/python] 외계어 사전 (0) | 2023.01.18 |
| [C/perfect C] 프로젝트 Part 1-05 : 십진수를 이진수, 8진수, 16진수로 변환 (0) | 2023.01.03 |