프로그래머스/코딩테스트 입문_자바

프로그래머스 Lv.0 _ JAVA

오동순이 2023. 4. 11. 13:35

Day 1 코딩테스트 입문 Lv.0 Java

1. 두 수의 차

정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.

class Solution {
    public int solution(int num1, int num2) {
        // int answer = 0;
        int answer = num1-num2;
        return answer;
    }
}

 

2. 두 수의 곱

정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        answer = num1 * num2 ;
        return answer;
    }
}

 

3. 두 수의 몫

정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(int num1, int num2) {
        int answer = num1/num2;
        return answer;
    }
}

제한사항
0 < num1 ≤ 100
0 < num2 ≤ 100

class Solution {
    public int solution(int num1, int num2) {
         int answer = 0;
        if((0 <= num1 && num1 <= 100) && (0 <= num2 && num2 <= 100)){
            answer = num1 / num2;
        }
        return answer;
    }
}

 

4. 두 수의 합

정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.


제한사항
-50,000 ≤ num1 ≤ 50,000
-50,000 ≤ num2 ≤ 50,000

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        if((-50000<= num1 && num1 <=50000) && (-50000 <= num2 && num2 <= 50000)) {
         answer = num1 + num2;   
        }
        
        return answer;
    }
}

 

-1 사용법 : 다른사람 문제 풀이로 내가 이해한 방향

문제 풀때 int answer = -1; 로 되있는데 이 값은 false 일때 보통 -1로 반환되기 때문에,

boolean _조건을 걸고, 값이 맞으면true 이면 if(val) 에서 answer에 값 대입 하여 true 값이 나옴, 아니라면 -1 값으로 반환

class Solution {
    public int solution(int num1, int num2) {
        boolean val = (-50000<= num1 && num1<= 50000 && -50000<=num2 && num2 <= 50000);
        int answer = -1;
        if(val){
            answer = num1 + num2;
        }
        return answer;
    }
}

 

* 처음에는 제한에 대해 두지 않고 풀었으나 뒤로 가면서 제한사항 확인하면서 풀음.

 


Day 2 코딩테스트 입문 Lv.0 Java

1. 두 수의 나눗셈

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.


제한사항
0 < num1 ≤ 100
0 < num2 ≤ 100

 

첫시도 실패 : 이유는 변수 형변환 안해줌, int 값을 double로 변환해야함 

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        answer = (num1/num2)*1000;
        return answer;
    }
}
테스트 1
입력값 〉3, 2
기댓값 〉1500
실행 결과 〉실행한 결괏값 1000이 기댓값 1500과 다릅니다.

 

정답 제출

class Solution {
    public int solution(int num1, int num2) {
        double answer = (double)num1/num2*1000;
        return (int)answer;
    }
}

다른 사람의 풀이 * 형변환*

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        double value = (double)num1 / num2 * 1000;
        answer = (int)value;
        return answer;
    }
}

 

2. 숫자 비교하기

정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

제한사항
0 ≤ num1 ≤ 10,000
0 ≤ num2 ≤ 10,000

 

나의 정답 제출 if else

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        if(num1 == num2) {
            answer = 1;
        } else {
            answer = -1;
        }
        return answer;
    }
}

다른 사람의 제출 삼항연산자

class Solution {
    public int solution(int num1, int num2) {
        int answer = (num1 == num2) ? 1 : -1;
        return answer;
    }
}

다른 사람의 제출 제한사항 적용 + 삼항연산자

class Solution {
    public int solution(int num1, int num2) {
        boolean val = (0<=num1 && num1<=10000 && 0<=num2 && num2 <=10000);
        int answer = 0;

        if(val){
            answer=(num1==num2)? 1: -1;
        }
        return answer;
    }

 

3. 분수의 덧셈

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항
0 <numer1, denom1, numer2, denom2 < 1,000

 

* 기약분수 : 분모와 분자의 공약수가 1뿐인 분수

 

일단 냅다 해봤는데 틀렸음

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {};
        int[] arr1 = {numer1, denom1};
        int[] arr2 = {numer2, denom2};
        answer = arr1 + arr2;
        
        return answer;
    }
}

 

 

정답제출 : 그치만 이해가 잘안되서 다시 공부 필

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = new int[2];
        answer[0] = denom1 * numer2 + denom2 * numer1;
        answer[1] = denom1 * denom2;                     
        
        int min = (answer[0] > answer[1]) ? answer[0] : answer[1];
        int a = 0;
        for(int i = 1; i <= min; i++) {
            if(answer[0]%i == 0 && answer[1]%i == 0) {
                a = i;
            }
        }
        answer[0] = answer[0]/a; 
        answer[1] = answer[1]/a;
        
        return answer;
    }
}

분수의 덧셈 참고 블로그

https://velog.io/@icedlatte/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv.-0-%EB%B6%84%EC%88%98%EC%9D%98-%EB%8D%A7%EC%85%88

 

[프로그래머스] Lv. 0 - 분수의 덧셈

최대공약수 찾기가 어려웠던 문제. 먼저 분자, 분모를 구하고 둘 중 작은 수를 1씩 줄여가면서 for문으로 돌린다. 둘 다 나머지가 0이 나오는 수로 약분하면 되겠다고 생각해서 로직을 짰다. 그런

velog.io

분수의 덧셈 참고 블로그 _ 나는 여기 블로그로 이해했음 (중등1학년 문제랍니다;;)

https://justdoit0730.tistory.com/106

 

[JAVA, Programmers] 분수의 덧셈(자바)

1. 문제 설명 첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와

justdoit0730.tistory.com

 

최대공약수와 최소공배수 참고 블로그

https://math100.tistory.com/135

 

최대공약수와 최소공배수란?

수학에는 최대공약수와 최소공배수라는 것이 있는데, 먼저 최대공약수에 대해서 알아보자. 일단 서로 다른 두 자연수라도 약수를 구해보면 똑같이 공통된 약수가 있다. 예를 들어 자연수 12와 18

math100.tistory.com

 

중등 수학 학습지제작소

https://calcproject.tistory.com/770

 

최대공약수와 최소공배수 사이의 관계 (개념+연습문제)

* 같이 보면 좋은 글 📄 자연수의 약수의 개수 구하기 (개념+수학문제) 📄 세 자연수의 최소공배수 (개념+수학문제) * 최대공약수와 최소공배수의 관계 두 자연수의 최대공약수와 최소공배수 사

calcproject.tistory.com


 

4. 배열 두배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

제한사항
-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ numbers의 길이 ≤ 1,000

 

나의 답안

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        for(int i=0; i<numbers.length; i++) {
         answer[i] = numbers[i] * 2;   
        }
        return answer;
    }
}
class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        answer = new int[numbers.length];
        for(int i=0; i<answer.length; i++){
            answer[i] = numbers[i]*2;
        }
        return answer;
    }
}

 

다른 사람 Arraylist 이용해서 푼 방법

import java.util.Arrays;

class Solution {
    public int[] solution(int[] numbers) {
        return Arrays.stream(numbers).map(i -> i * 2).toArray();
    }
}

import java.util.*;

class Solution {
    public ArrayList solution(int[] numbers) {
        ArrayList<Integer> answer = new ArrayList<>();

        for(int num : numbers){
            answer.add(num*2);
        }

        return answer;
    }
}

컬렉션 프레임워크로 푸는 방법도 생각해볼것!