1. 팰린드롬
ex1>
앞에서 읽으나 뒤에서 읽으나 똑같은 단어(회문= 팰린드롬),
문자열을 입력 받아서 입력된 문자가 팰린드롬인지 아닌지 여부를 확인하는 함수를 작성하라.
(입력된 문자열이 팰린드롬이면 true 를 리턴하고, 아니면 false 를 리턴해야한다.)
c>
/Users/kim-yunhee/CLionProjects/uni_study/cmake-build-debug/uni_study
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isPalindrome (char* inputStrig);
void main (int argc, char** args){
int result;
if(argc<2){
printf("Usage: palindrome inputString \n");
return;
}
result=isPalindrome(args[1]);
if(result){
printf("it is palindrome \n");
}
else{
printf("is is NOT plindrome \n");
}
}
int isPalindrome (char* inputString){
int index;
int length=strlen(inputString);
int testEndingIndex=length/2;
for(index=0;index<testEndingIndex;index++){
if(inputString[index] != inputString[length-1-index]){
return0;
}
}
return1;
}
Run-Edit Configurations-Program arguments
입력: madam / 출력: it is palindrome
->
실행은 잘 되지만 효율성을 따져봤을 때,
효율성 해결1>
for 루프 내부에 존재하는 if 조건문을 보면,
루프가 반복될 때마다 비교하는 문자의 위치를
입력된 문자열의 맨 끝에서부터 왼쪽으로 한 칸씩 옮기는 계산을 수행.
length-1-index
다시 말해, 적어도 length-1 은 for 루프 바깥에서 미리 수행될 수 있기 때문에 그렇게 하는 것이 조금이라도 효율적.
효율성 해결 2>
수학적 관찰
컴퓨터 학자 그루엔버거의 알고리즘
1. 숫자를 아무거나 고른다.
2. 그 수를 뒤집어라.
3. 두 수를 더한 결과가 팰린드롬이 아니라면2로 되돌아가 동일한 과정을 반복/ 팰린드롬이라면 알고리즘 종료.
ex> n=19,
19 + 91 = 110
110 + 011 = 121 -> 팰린드롬이므로 알고리즘 종료
-> 그러나 196알고리즘(196문제)
: 그루엔버거 알고리즘을 반복해서 실행하다 보면 수의 크기가 점점 빠른 속도로 증가-> 저장 가능한 비트의 단위를 뛰어넘음-> 커다란 수를 저장할 수 있는 특별한 알고리즘을 동원하지 않으면 계산 진행 불가
공간, 시간 둘다 중요
출처. 누워서 읽는 알고리즘(임백준)
/ argv 인자 입력 실행 https://morecode.tistory.com/m/160
'개발 > 이론' 카테고리의 다른 글
[Algorithm] 알고리즘과 복잡도 (0) | 2019.02.20 |
---|---|
[JAVA] static (0) | 2019.02.20 |
[JAVA] 클래스 (0) | 2019.02.20 |
[JAVA] 메서드, 객체 (0) | 2019.02.20 |
[Algorithm] 둠스데이 알고리즘 - 날짜, 요일, 윤년 (0) | 2019.02.08 |