1356 유진수
Updated:
1356 유진수
[Baekjoon] 1356 유진수, 문제 풀이.
프로그래밍 언어: C
문제
접근
- 숫자를 문자열로 받고, 인덱스값을 이용하여 좌·우 곱을 구한다.
- 분할 횟수(문자열의 길이보다 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