각도기

 

오늘은 알고리즘에 대한 풀이를 해보았다.

java 강의를 본 게 있어서 쉽게 풀 줄 알았지만,

알고리즘 풀이에 관한 지식이 없었기 때문에 사실상 새로 배워야했다.

 

 

 

딱 보기에도 조건이 들어가기 때문에 IF() 를 사용해야할 듯 하다.

 

else if 를 사용하면

 이렇게 될 가능성이 높아서

 

    if(angle < 90 , angle > 0) answer = 1;
    if(angle == 90) answer = 2;
    if(angle > 90 , angle < 180) answer = 3;
    if(angle == 180) answer = 4;

이런식으로 적어 보았다.

 

그러나  IF 사이에  ' , ' 로 and 와 같은 기능을 주는것이 안되는 듯 하다..

(아직 기초도 없고, SQL과 헷갈리기도 하는 상태인 듯)

 

에러가 나는것은 아니지만 원하는 방식으로 작동하지 않는다.

 

해결을 위해 IF에 주로 사용되는 논리 연산자 사용법에 대해 알아보았다.

 

 

애초에 논리 연산자로 콤마(,) AND를 사용하는 것이 아니었다

그러면 && 를 사용하면 되겠지?

 

int solution(int angle) {
    int answer = 0;
    if(angle < 90 && angle > 0) answer = 1;
    if(angle == 90) answer = 2;
    if(angle > 90 && angle < 180) answer = 3;
    if(angle == 180) answer = 4;
    return answer;
}

 

정답인지는 모르겠으나 잘 작동한다.

 

 

다음 문제는, 짝수의 합

 

수학도 모르고 코딩도 모르기에

 

일단 짝수의 합에 대해 알아본 결과

 

n * (n/2+1) / 2;

공식을 어디선가 구해올 수 있었다.

 

n이 10 이라고 했을때

10x (10/2+1) /2 

10x 6 / 2 = 30

맞는 공식인 듯 하다. (갑자기 분위기 수학)

 

    int answer = n * (n/2+1) / 2;
        return answer;

 

하면 끝일까?

문제는 n은 홀수도 포함이 되어있다.

첫번째 방법으로 모든 정수를 더하고, 홀수의 합을 빼는 방법이 있고,

두번째 방법으로 n이 홀수인 경우 -1을 해줘서 짝수로 만들어버리는 수를 생각했다.

 

 

두번째 방법을 사용해보자.

int solution(int n) {
    int C=0;
    if(n % 2 == 0) C=0;
    else C=1;
    int answer = (n-C) * ((n-C)/2+1) / 2;
    return answer;
}

아직 알고있는 함수가 별로 없지만, 두뇌를 풀 가동 해서 써보았다.

그냥 보기에도 엄청 초보자스러운 코드이다...

 

 

놀랍게도 잘 작동하는 듯

 

 

다른 사람의 풀이를 보니, 나처럼 공식으로 때려막은 사람은 거의 없었다.

위가 가장 정석적인 풀이인 듯 하다.

 

for 는 조건이 만족하는동안 반복수행하는 반복문 이라고 한다.

for(초기치 , 조건식, 증감식) 으로 구성이 되어있고 

초기치에서 시작해서, 조건식을 만족하는동안 증감식을 계속 수행하는 함수이다.

 

위의 경우를 해석하면

i=2 로 시작해서, n 이하가 될때 까지, i 값에 2를 더하는것 (i=i+2)

그렇게 answer = answer +i  를 반복하게 된다. i 가 n 이하가 될때까지 

2 -> 6 -> 12 -> 20 -> 30 -> 42 -> ... answer 값이 늘어나게 된다 

i 가 2씩 늘어나기 때문에, n이 홀수인 경우는 자연스럽게 이전 짝수까지만 계산하게 된다.

 

 

 

문제를 풀면서 뭔가 이상하고 낯설다 라는 생각을 했는데

지금까지 풀이했던 문제들이 c언어 베이스로 되어있었다.

오늘 배운건  사실 c 언어 였던 것이다.

 

내일부터는 javascript  로 설정하고 풀이해야겠다.

 

 

+ Recent posts