1356 유진수

Updated:

1356 유진수

[Baekjoon] 1356 유진수, 문제 풀이.
프로그래밍 언어: C

문제

1356 유진수

접근

  • 숫자를 문자열로 받고, 인덱스값을 이용하여 좌·우 곱을 구한다.
  • 분할 횟수(문자열의 길이보다 1 작다.), 분할마다의 인덱스 값 이동, 2번의 작업을 해줘야 하기 때문에 이중 반복문을 사용한다.
  • 인덱스 이동이 하나는 0부터, 하나는 (문자열의 길이 - 1)부터이기때문에 2개의 반복문을 사용한다.
  • 숫자를 문자열로 받았기 때문에, 아스키 코드를 이용하여 빼준다.
  • 좌·우 곱이 같아지면 추가 연산이 필요없으므로 반복문을 탈출한다.

전체 코드

/*
1356 유진수
*/

#include <stdio.h>
#include <string.h> // strlen()

int main(void)
{
    char num_str[11];   // 2147483647: 열 자리숫자이므로 배열 공간은 11칸
    int tot_left, tot_right; // tot: 자리수 곱
    
    scanf("%s", num_str);
    
    if (strlen(num_str) == 1) printf("NO");  // 한 자리숫자는 유진수가 아님
    else {
        for (int i=0;i<strlen(num_str)-1;i++){  // 문자열의 길이보다 1적게 나눈다.
            tot_left = 1;   // 초기화
            tot_right = 1;
            for (int j=0;j<=i;j++){
                tot_left *= num_str[j] - '0';  // 문자열로 받았기 때문에 아스키 코드값만큼 빼준다.
            }
            for (int k=strlen(num_str)-1;k>i;k--){
                tot_right *= num_str[k] - '0';
            }
            if (tot_left == tot_right) break;  // 같아졌을때, 추가 연산이 필요없으므로 탈출
        }
        printf("%s", (tot_left == tot_right) ? "YES" : "NO");  // 삼항연산자 사용
    }
    return 0;
}

개선 및 부족한 사항

  • strlen() 함수 사용 시, 변수를 선언해서 사용하는 편이 가독성이 좋다.
  • 알고리즘의 작동방식을 먼저 생각해보고 이에 따라 코드를 작성하는 편이 좋다.

Leave a comment