본문 바로가기

프로그래밍/코딩테스트

[프로그래머스] lv.0 홀짝에 따라서 다른값 반환하기

https://school.programmers.co.kr/learn/courses/30/lessons/181935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

양의 정수 N이 매개변수로 주어질때, n이 홀수라면 n이하의 홀수인 모든 양의 정수 합을 return

n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return하는 프로그램 작성하는 문제이다.

 

나의 풀이는 다음과 같다. (깔끔하지 못한부분에 대해서는 아쉽다고 생각한다.. 나의 풀이능력이 아직은 부족한것이니 더 노력하는 수밖에)

 

if문을 사용하여 홀수인경우에는 for문을 통하여 int자료형 객체 i가 n이하만큼 반복하며

홀수(여기서 if % 2 != 0 을 사용하여 홀수를 지정하였다.)의 값들을 answer 객체에 더하는 방식이다.

 

짝수인경우는 else로 넘어가서 마찬가지로 for문을 통하여 n번만큼 반복하고 그안에서 짝수(i %2 == 0 으로 짝수값만 가져와서 실행)인 값들을 곱하여 제곱으로 만든값을 answer 객체에 집어넣는 방식으로 구현하였다.

 

정답을 적으면서도 이 방법밖에 없나.. 생각을 많이했는데 30분~ 아무리많이잡아도 40분안에는 문제를 풀어야한다고 생각하기에 

그 시간안에 맞추는것을 1차목표로 잡고 나머지는 다른분들의 풀이를 보고 배우기로 한 처음의 목표대로 답안을 제출했다. 

class Solution {
    public int solution(int n) {
        int answer = 0;

        if(n % 2 != 0){
          for (int i =0; i <= n; i++){
              if(i % 2 != 0){
                  answer += i;
              }
          }
        }else{
            for (int i =0; i <= n; i++){
              if(i % 2 == 0){
                answer += i * i;
              }
          }
        }
        return answer;
  }
}

 

다른 분의 풀이

int 객체 odd(홀수),짝수(jjj)를 선언후 for문을 통하여 주어진 정수 n만큼 반복하는 구간을 만든다.

그후 그 안에서 짝수인경우(i % 2 == 0) jjj객체에 i*i(제곱)의 값을 넣어주고

그 외의 경우에는 odd(홀수)객체에 i+i의 값을 넣어주는 방식으로 눈에 잘 띄도록 적어놓으셨다.

 

그리고 삼항연산자를 사용하여 n % 2 == 0 (짝수) 인 경우에는 jjj가 answer 객체의 값으로 들어가고 홀수인경우에는 odd값이 answer 객체의 값으로 들어가게 한후 return으로 값을 반환하는 방식이다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        int odd = 0;
        int jjj = 0;
        for(int i = 1; i <= n; i++){
            if(i%2 == 0) jjj += i*i;
            else odd += i;
        }

        answer = n % 2 == 0 ? jjj : odd;

        return answer;
    }
}

 

 

문제풀이 자체의 생각은 비슷한거같은데 나는 쓸데없이 if문을 여러번 사용하였고 for문도 같은 부분을 여러번사용하여 눈에 잘 들어오지않는 반면에 해당 문제풀이의 경우는 눈에 정말 잘 들어온다. 다음의 문제풀이때는 중복되는 부분을 최대한 없애보고 한번의 반복문안에서 값을 잘 담도록 구현해보아야겠다.