상세 컨텐츠

본문 제목

백준 새싹 배열 5597번 과제 안 내신 분

백준 연습

by 빙하둘리 2022. 9. 4. 20:13

본문

728x90

백준 새싹 배열 5597번 과제 안 내신 분 풀이

문제 링크

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

 

문제 풀이 아이디어)

배열을 인덱스 0부터 30까지 가지게 배열의 크기를 31로 선언했다.

초기에 배열은 모두 0으로 초기화했다.

출석번호를 N이라고 받으면 arr[N];에 N을 저장하도록 했다.

그리고 인덱스가 0일 때는 출석번호가 아예 들어가지 않으므로 -1을 담도록 했다.

그러면 1부터 30까지 출석번호를 받지 않은 두 번호는

해당 번호로 인덱스를 가지는 배열 요소들이 0이된다.

 

#include <iostream>
using namespace std;


int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	//배열 전체를 0으로 하고 1은 1에 2는 2에 저장

	int arr[31] = { 0, }; // index 0부터 30까지;
	arr[0] = -1; // 아무것도 없음

	for (int i = 0; i < 28; i++) // 28번 받아라
	{
		int k;
		cin >> k;
		arr[k] = k;
	}

	int flag = 0;
	for (int i = 1; i < 31; i++) {
		if (arr[i] == 0 && flag == 0) {
			cout << i << '\n';
			flag = i;
			break;
		}
	}

	for (int i = flag + 1; i < 31; i++) {
		if (arr[i] == 0)
		{
			cout << i;
		}
	}
		
	//예제 입력 3 1 4 5 7 9 6 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

	return 0;
}

두 수 중, 작은 수부터 출력을 해야하므로 첫번째 수(작은 수)는 flag에다 저장을 한다.

두번째 수를 찾을 때는 flag+1부터 반복문을 돌리는 기법으로 두번째 수를 찾았다.

728x90

관련글 더보기

댓글 영역