코딩테스트 연습

myminimin·2023년 7월 26일
0

코딩테스트 연습 문제

1. 각도기

// 내 풀이 JAVA 
class Solution {
    public int solution(int angle) {
        int answer = 0;
        
        if ( 0 < angle && angle < 90 ) {
            answer = 1;
        } else if ( angle == 90) {
            answer = 2;
        } else if ( 90 < angle && angle < 180) {
            answer = 3;
        } else {
            answer = 4;
        }
        
        return answer;
    }
}
// 다른 사람의 풀이 JAVA 삼항연산자 이용
class Solution {
    public int solution(int angle) {
        return angle == 180 ? 4 : angle < 90 ? 1 : angle == 90 ? 2 : angle > 90 ? 3 : 0;
    }
}

삼항연산자를 사용해볼 생각은 하기는 해봤는데 오히려 가독성이 떨어지는 것 같다... 조건이 3개 이상 넘어가면 기본 if문을 사용하는게 더 좋아보인다.

// 다른 사람의 풀이 python
def solution(angle):
    answer = (angle // 90) * 2 + (angle % 90 > 0) * 1
    return answer

언제봐도 python은 참 대단한 언어같다 ... 항상 JAVA로 풀고 python은 어떻게 풀었나 보는데 볼때마다 너무 짧고 깔끔하게 해결이 되어서 놀랍다...😮

2. 짝수의 합

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=2; i<=n; i+=2) {
            answer += i;
        }
        return answer;
    }
}

문제에서 정수 n이 주어질 때, n 이하의 짝수를 모두 더한 값을 return을 하기를 원했으니까

처음부터 i=2를 넣고 2씩 n이 될때까지 +2를 증가시키면 n이하의 짝수만 i에 출력될테니 그 출력된 값들을 answer에 더하면 된다!!!!

// 다른 사람의 풀이 python
def solution(n):
 	return 2*(n//2)*((n//2)+1)/2

파이썬은 외계인이 만든 언어인건가.........

3. 배열의 평균 값

// JAVA 내가 쓴 풀이
class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        
        for(double d : numbers){
            answer += d/numbers.length;
        }
        return answer;
    }
}

```java
// JAVA 다른사람의 풀이
import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        return Arrays.stream(numbers).average().orElse(0);
    }
}

stream도 처음보고 orElse도 처음 보는데 아무튼 어썸하다... 👀!!! 추가로 공부해보기

// 다른 사람의 풀이 python
import numpy as np

def solution(numbers):
    return np.mean(numbers)

4. 양꼬치

// JAVA 내가 쓴 풀이
class Solution {
    public int solution(int n, int k) {
        return (n*12000)+((k*2000)-(n/10)*2000);
    }
}

5. 피자 나눠 먹기(1)

// JAVA 내가 쓴 풀이
class Solution {
    public int solution(int n) {
        int answer = 0;

        if ( n >= 1 && n <= 100) {
            if ( n%7 == 0) {
                answer = n / 7;
            } else {
                answer = (n/7)+1;
            }
        }

        return answer;
    }
}
// JAVA 다른 사람이 쓴 풀이
class Solution {
    public int solution(int n) {
        return n%7 == 0 ? n/7 : n/7+1;

    }
}

조건이 적으면 삼항연산자 쓰는게 깔끔하다고 그래서 써보고 싶었는데 조건식을 이렇게 적으면 되는구나.. 나는 문제에 나와있는 1 ≤ n ≤ 100 를 조건식으로 사용했는데 1개는 맞고 나머지 2개는 틀리다고 나와서 중첩 if문을 사용해서 문제를 풀었다.

answer = ( n >= 1 && n <= 100 ) ? n/7 : n/7+1;
이렇게 썼는데 지금보니까 n%7 의 나머지가 0이면 n/7 일때 1판만 있으면 되고 아닌 경우에 예를 들어서 n=8이면 2판이 필요 이런식으로 사용을 할 수 있겠다..... !!!

// JAVA 다른 사람이 쓴 풀이
class Solution {
    public int solution(int n) {
        return (n + 6) / 7;
    }
}

짧다고 무조건 좋은 건 아니라지만 (n+6)에서 6이 어떤 수를 7로 나누면 나머지가 0부터 6까지만 들어가기 때문에 어떤 수 n에 6을 더한 뒤에 7을 나누면 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 할 수 있다... 인 것 같다. 이건 수학을 잘해야 알 수 있는건가.... 대단하다..... 역시 코드는 답이 없다는 게 맞나보다... 😧


모르는 문제도 아는 문제도 있었다. 아는 문제도 한 번 더 다른 사람들은 어떻게 코드를 작성했나 한 번 더 살펴보고 모르는 문제는 코드가 어떻게 돌아가는 지 분석도 해보고 몰랐던 함수에 대해서 공부해보자!

0개의 댓글