본문 바로가기
백준 문제풀이

BOJ/2816

by alscks 2024. 1. 7.
디지털 티비
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

void num1(int* pointer, char arr[][11], int cnt) {
	if ((*pointer) < cnt) {
		(*pointer)++;
	}
}
void num4(int* pointer, char arr[][11], int cnt) {
	if ((*pointer) > 1) {
		(*pointer)--;
		char stor[11];
		strcpy(stor, arr[(*pointer)]);
		strcpy(arr[(*pointer)], arr[(*pointer) + 1]);
		strcpy(arr[(*pointer) + 1], stor);
	}
}

int main(void) {

	int cnt;
	char arr[101][11];

	scanf("%d", &cnt);

	for (int i = 1; i <= cnt; i++) {
		scanf("%s", &arr[i]);
	}

	int pointer = 1;

	while (1) { // kbs1 정렬
		if (strcmp(arr[1], "KBS1") == 0 && strcmp(arr[2], "KBS2") == 0) return 0;
		if (strcmp(arr[pointer], "KBS1") == 0) break;
		num1(&pointer, arr, cnt); printf("1");
	}
	while (1) { // kbs1 정렬
		if (strcmp(arr[1], "KBS1") == 0 && strcmp(arr[2], "KBS2") == 0) return 0;
		if (strcmp(arr[1], "KBS1") == 0) break;
		num4(&pointer, arr, cnt); printf("4");
	}
	while (1) { // kbs2 정렬
		if (strcmp(arr[1], "KBS1") == 0 && strcmp(arr[2], "KBS2") == 0) return 0;
		if (strcmp(arr[pointer], "KBS2") == 0) break;
		num1(&pointer, arr, cnt); printf("1");
	}
	while (1) { // kbs2 정렬
		if (strcmp(arr[1], "KBS1") == 0 && strcmp(arr[2], "KBS2") == 0) return 0;
		if (strcmp(arr[2], "KBS2") == 0) break;
		num4(&pointer, arr, cnt); printf("4");
	}

	return 0;
}

  1. 1234번 실행하는 함수 만들기 (2차원 배열 참조시 열을 정의해주어야 한다..)
  2. 어떻게 kbs1과 kbs2를 정렬할 지 알고리즘 세우기
    - 1과 4를 이용하여 1-4(kbs1)-1-4(kbs2)순으로 정렬 
    - 1, 3, 4를 이용하여 3-1-4-(포인터 위치 체크)-3-1-4 순으로 kbs1, kbs2정렬
  3. 출력 개수가 500을 넘기면 안되지만 1과 4만 이용하는 무식한 방법을 선택해도 방송 개수가 2<=N<=100이므로 500을 초과할 수 없다. 따라서 편한 방법을 사용하면 됨.

'백준 문제풀이' 카테고리의 다른 글

BOJ/10988  (0) 2024.01.07
BOJ/11655  (0) 2024.01.07
BOJ/1110  (0) 2024.01.07
BOJ/1652  (0) 2024.01.07
BOJ/17269  (2) 2024.01.06