본문 바로가기
⌨️ Algorithm/C

1/7 [C언어] 백준 23292번 - 코딩 바이오리듬

by Lucy Oh 2022. 1. 7.

<문제>

 

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

 

23292번: 코딩 바이오리듬

바이오리듬(biorhythm)이라는 이론을 들어본 적 있는가? 바이오리듬은 인체에 신체,감성,지성의 세가지 주기가 생년월일의 입력에 따라 어떤 패턴으로 나타나고, 이 패턴의 조합에 따라 능력이나

www.acmicpc.net

 

<내가 작성한 답>

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	char bir[9], input[9], out[9];
	int max = 0, testcase, answer;
	int i, j;


	scanf("%s", bir); //생일을 bir 배열에 바로 저장해줌.

	scanf("%d", &testcase); //testcase라고 썼지만 날짜 몇번 입력할건지에 대한 변수

	while (testcase--) {
		scanf("%s", input); //날짜 input배열에 저장함.
		int a, b, c;
		a = b = c = 0;

		for (i = 0; i < 4; i++) {
			a += ((bir[i] - '0') - (input[i] - '0')) * ((bir[i] - '0') - (input[i] - '0'));
		}
		for (; i < 6; i++) {
			b += ((bir[i] - '0') - (input[i] - '0')) * ((bir[i] - '0') - (input[i] - '0'));
		}
		for (; i < 8; i++) {
			c += ((bir[i] - '0') - (input[i] - '0')) * ((bir[i] - '0') - (input[i] - '0'));
		}
		answer = a * b * c;
        // 입력해준 input배열과 생일 bir배열을 통해 answer (코딩 바이오리듬)을 계산함.

		if (answer > max) {
			max = answer;
			for (i = 0; i < 8; i++) {
				out[i] = input[i];
			}
		} 
        /*input배열에 저장한 날짜가 max에 저장되어있는 코딩 바이오리듬보다 크다면 
        out배열에 input배열 저장하기.*/
        
		else if (answer == max) { //만약 나온 코딩 바이오리듬이 현재 max와 같다면 날짜비교
			for (i = 0; i < 8; i++) { //처음부터 날짜를 비교하기 시작
				if (input[i] < out[i] || input[i] > out[i]) { 
                /*
                현재 답으로 설정한 날짜(out)가 지금 입력한 날짜(input)보다
                크거나 작아지면?
                */
					if (input[i] < out[i]) { 
                    // 현재 out에 저장되어 있는게 큰 경우 (출력할 배열 변화 필요)
						for (j = 0; j < 8; j++) { 
							out[j] = input[j];
						} 
						break; //바꾸고 각각의 원소 비교해주는 배열 나가기
					}
					else break; 
                    // out에 저장되어 있는 날짜가 작은 경우: 그냥 비교하는 for문만 나가주면됨.
				}
			}
		}
	}

	for (i = 0; i < 8; i++) {
		printf("%c", out[i]); //out배열(답) 출력해주기
	}

	return 0;
}

날짜를 한번에 배열에 저장하기 위하여 char로 받았는데.. 음 괜히 그런듯 공식이 어려워 보였지만 구현은 너무 쉬웠고, 

오히려 같은 코딩 바이오리듬을 가졌을때 더 빠른 날짜를 출력해내는 부분에서 좀.. 시간을 많이 쏟은듯.

솔직히 전체적으로 쓴 코딩이 너무 더러워서 답은 맞았으나 찝찝..하다

 

차라리 char형으로 받은 배열을 다시 int형으로 고쳐서 문제를 풀고,

공식에 대입하거나 날짜 비교를 했다면 오히려 더 편했을 수도 있을 것 같다. 

 

흠.. 어쨌든 끝..

 

댓글