[프로그래머스] JAVA

설하나·2023년 10월 11일
0

알고리즘

목록 보기
21/22

1. 홀짝에 따라 다른 값 반환하기

[문제 상황]

양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.

[풀이 코드]

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        if(n%2 == 0) {
           for(int i=n; i>0;i-=2) {
                answer+=i*i;
            } 
        } else {
            for(int i=n; i>0;i-=2) {
                answer+=i;
            }    
        }
        
        return answer;
    }
}

[문제 해결 방향]

입력받은 n이 짝수인지, 홀수인지를 if문에서 판별 후 for문으로 결과값을 생성하였다.
for문에서는 짝수일때는 짝수만이, 홀수일때는 홀수만이 필요하기때문에 n부터 2씩 감소하도록 하였으며, 짝수일경우는 제곱의 합이 필요하기 때문에 answer에 해당 값의 제곱값을 누적하였다.

[정리]

  • i의 제곱값을 i * i로 표현하였는데, 자바에서 제곱을 계산하는 Math.pow()가 있다.
    i * i == Math.pow(i,2) 

2. flag에 따라 다른 값 반환하기

[문제 상황]

두 정수 a, b와 boolean 변수 flag가 매개변수로 주어질 때, flag가 true면 a + b를 false면 a - b를 return 하는 solution 함수를 작성해 주세요.

[풀이 코드]

class Solution {
    public int solution(int a, int b, boolean flag) {
        return flag ? a + b : a - b; 
    }
}

[문제 해결 방향]

삼항연산자를 사용해서 만약 flag 값이 true라면 :를 기준으로 왼쪽의 값이 반환되고 false라면 :를 기준으로 오른쪽 값이 반환되도록 작성하였다.

3. 조건 문자열

[문제 상황]

문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.

두 수가 n과 m이라면

  • ">", "=" : n >= m
  • "<", "=" : n <= m
  • ">", "!" : n > m
  • "<", "!" : n < m

두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

[풀이 코드]

class Solution {
    public int solution(String ineq, String eq, int n, int m) {
        if (ineq.equals(">")) {
            if (eq.equals("=")) {
                return n >= m ? 1 : 0;
            } else if (eq.equals("!")) {
                return n > m ? 1 : 0;
            }
        } else if (ineq.equals("<")) {
            if (eq.equals("=")) {
                return n <= m ? 1 : 0;
            } else if (eq.equals("!")) {
                return n < m ? 1 : 0;
            }
        }

        return 0; 
    }
}

[문제 해결 방향]

효율적으로 처리할 수 있는 방법이 뭘까 고민을 하다 결국 if~else문을 사용하였다.
ineq값을 기준으로 >인지 <인지 구분을 하고, 만약 두가지다 해당하지 않은다면 맨 마지막 줄에서 0을 리턴하도록 작성하였다.
ineq값으로 구분한 후, eq에따라서 알맞은 연산을 시행한 후 연산의 결과가 true라면 1을 false라면 0을 반환하도록 작성하였다.

4. 공배수

[문제 상황]

정수 number와 n, m이 주어집니다. number가 n의 배수이면서 m의 배수이면 1을 아니라면 0을 return하도록 solution 함수를 완성해주세요.

[풀이 코드]

class Solution {
    public int solution(int number, int n, int m) {
        int answer = 0;
        
        if(number % n == 0 && number % m == 0){
            answer = 1;
        }else{
            answer = 0;
        }
        
        return answer;
    }
}

[문제 해결 방향]

number가 n의 배수이면서 m의 배수라는 조건은 number을 n과 m으로 나누었을때의 나머지가 0 이라는 점을 이용했다. 또한 두조건다 만족해야하므로 and 연산을 시행하였다.

5. n의 배수

[문제 상황]

정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.

[풀이 코드]

class Solution {
    public int solution(int num, int n) {
        int answer = 0;
        if(num % n == 0) {
            answer = 1;
        }
        return answer;
    }
}

[문제 해결 방향]

number가 n의 배수인가는 number를 n으로 나눴을때 나머지가 0인가를 확인하는 것이라고 생각하였다. if문으로 조건을 확인하고 answer 값을 조건에 맞게 할당한 후 반환하는 코드를 작성하였다.

오늘의 알고리즘도 완료!!
코딩 기초 트레이닝 캘린더

profile
Backend

0개의 댓글