[백준 BOJ] 2920번 음계 (C언어)

2022. 1. 30. 20:39PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2920번: 음계

다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8

www.acmicpc.net

 

백준 BOJ 2920번 음계 문제 사진
백준 BOJ 2920번 음계 문제 사진2

 

접근 방법 - 배열을 이용한 판별 문제

백준의 2920번 문제는 배열의 속성을 이용해서 정답을 구해내야 하는 문제이다.

해당 문제에선 입력받은 숫자 배열을 통하여, 오름차순인지 내림차순인지, 아니면 mixed인지를 판별해야 한다.

필자의 경우에서는 시작하는 숫자가 1인 경우와 8인 경우를 나누어서 코드를 작성하였다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 8개의 숫자를 순차적으로 입력받는다.

 

2) num을 선언하며, 여기에 1)에서 입력받은 숫자들 중 첫 번째 숫자를 저장한다.

 

3) num값에 따라 아래의 연산을 취한다.

- num이 1이라면, 1~8까지 순차적으로 배치되어있는지 확인하고 맞을 시 "ascending"을 출력한다.

- num이 8이라면, 8~1까지 순차적으로 배치되어있는지 확인하고 맞을 시 "descending"을 출력한다.

 

4) 3)에서 출력 완료되었다면 즉시 실행 종료하고, 출력되지 않았다면 "mixed"를 출력하고 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 2920번 코드
int a[8];
int main() {
	for (int i = 0; i < 8; i++) {
		scanf("%d", &a[i]);
	}

	int num = a[0];
	if (num == 1) {
		for (int i = 1; i < 8; i++) {
			num++;
			if (a[i] != num) { break; }
			if (i == 7) {
				printf("ascending\n");	return 0;
			}
		}
	}
	else if (num == 8) {
		for (int i = 1; i < 8; i++) {
			num--;
			if (a[i] != num) { break; }
			if (i == 7) {
				printf("descending\n");	return 0;
			}
		}
	}
	printf("mixed\n");
}

 

제출 결과

백준 BOJ 2920번 음계 문제 C 제출 결과

(2021.12.16 백준 2920번 문제 제출 결과)

반응형