프로그래머스1일차

지선·2023년 4월 27일

코딩테스트

목록 보기
1/8

중간고사가 끝나고 어떤 것을 공부할까 고민하다가
알고리즘은 방학 때 집중해서 공부하는게 나을 듯 해서 프로그래머스에서 코딩테스트 입문부터 시작하기로 했다.

사실 처음이라 조금 쉽긴해서 많이 문제를 풀었다.

두 수의 차

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

몫 구하기

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

숫자 비교하기

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 = 0;
        answer = num1 * num2;
        return answer;
    }
}

나머지 구하기

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

나이 출력

class Solution {
    public int solution(int age) {
        int answer = 0;
        
        answer=2022-age+1;
        
        return answer;
    }
}

두 수의 합

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

두 수의 나눗셈

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

각도기

class Solution {
    public int solution(int angle) {
        int answer = 0;
        if(angle<90){
            answer=1;
        }
        else if(angle==90){
            answer=2;
        }
        else if(angle<180){
            answer=3;
        }
        else{
            answer=4;
        }
        return answer;
    }
}

짝수의 합

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

배열의 평균값

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

양꼬치

class Solution {
    public long solution(int n, int k) {
        long answer = 0;
        int cnt=0;
        
        cnt=n/10;
        
        answer=n*12000+(k-cnt)*2000;
        return answer;
    }
}

배열 뒤집기

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];
        int cnt=0;
        for(int i=num_list.length-1;i>=0;i--){
            answer[cnt]=num_list[i];
            cnt++;
        }
        return answer;
    }
}

배열 두 배 만들기

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 num1, int num2) {
        
        int[] answer = new int[num2-num1+1];
        int index=0;
        for(int i=num1;i<=num2;i++){
            answer[index]=numbers[i];
            index++;
        } 
        return answer; 
    }
}

중복된 숫자 개수

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        for(int i=0;i<array.length;i++){
            if(array[i]==n){
                answer++;
            }
        }
        return answer;
    }
}

배열 원소의 길이

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

문자열 뒤집기

class Solution {
    public String solution(String my_string) {
        String answer = "";
        String[] arr=new String[my_string.length()];
        for(int i=0;i<my_string.length();i++){
            arr[i]=my_string.substring(i,i+1);
        }
        for(int i=my_string.length()-1;i>=0;i--){
            answer+=arr[i];
        }
        return answer;
    }
}

⛤특정 문자 제거하기

class Solution {
    public String solution(String my_string, String letter) {
        String answer = "";
        
        answer = my_string.replaceAll(letter,"");
       
        return answer;
    }
}

이거는 한 번에 풀지는 못했고.. 문자열에서 특정 문자를 제거할 수 있는 방법을 알아보다가.. replaceAll("바꿀 문자열","어떤 문자열로 바꿀건지")
이렇게 쓰면 된다고 한다
그러니까 만약 특정 문자열(str="aabbccddeeaa")에서 a라는 문자를 A라고 바꾸고 싶다면
str.repalceAll("a","A");
이렇게 하면 AAbbccddeeAA로 치환되게 된다.

그래서 이 문제는 my_string이라는 문자열에서 letter라는 문자를 찾아 공백처리하면 된다.

점의 위치 구하기

class Solution {
    public int solution(int[] dot) {
        int answer = 0;
        if((dot[0]>0)&&(dot[1]>0)){
            answer=1;
        }
        else if((dot[0]<0)&&(dot[1]>0)){
            answer=2;
        }
        else if((dot[0]<0)&&(dot[1]<0)){
            answer=3;
        }
        else {
            answer=4;
        }
        return answer;
    }
}

짝수 홀수 개수

class Solution {
    public int[] solution(int[] num_list) {

        int[] answer= {0,0};
        
        
        for(int i=0;i<num_list.length;i++){
            if(num_list[i]%2==0){
                answer[0]++;
            }
            else{
                answer[1]++;
            }
        } 
        return answer;
    }
}

약수 구하기

class Solution {
    public int[] solution(int n) {
        
        int[] answer =new int[n+1];
        int index=0;
        for(int i=1 ; i<=n ; i++){
            if(n%i==0){
                answer[index]=i;
                index++;
            }
        }
        
        int[] arr=new int[index];
       for(int i=0;i<index;i++){
           arr[i]=answer[i];
       } 
        return arr;
    }
}

⛤분수의 덧셈

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {

        int numerator, denominator;
        
        for(int i=2;;i++){
            if(((i%denom1)==0)&&((i/denom1)>0)&&((i%denom2)==0)&&((i/denom2)>0)){
                denominator=i;
                numerator=numer1*(i/denom1)+numer2*(i/denom2);
                break;
            }
            
        }
        int i=1;
        while(true){
            i++;
            if((i>denominator)&&(i>numerator)){
                break;
            }
            if((denominator%i==0)&&(numerator%i==0)){
                denominator=denominator/i;
                numerator=numerator/i;
                i--;
            }
        }
        
        int []answer={numerator,denominator};
        return answer;
    }
}

뭔가.. 이것보다 쉽게 푸는 방법이 있을 듯 한데.. 우선 나는 이렇게 풀어보았다.
처음에 제출해봤을 때 실패가.. so many 떠서.. 화가 나서 뭐가 문젠지 살펴보았다.

그래서 뭔가 내가 로직을 잘못 짠건가 곰곰히 생각해보다가 문제를 읽어보니 기약분수로 나와야한대서 통분이.. 필요하구나를 깨달았다.

지금 수학학원에서 분수를 구하면 통분했는지 무조건 확인해봐야되고 문제도 잘 읽어야된다고 잔소리했으면서^^ 내가 안할줄은..

오늘 꽤 많은 문제를 풀은 듯 싶은데(사실.. 쉬워서..그런듯 하다) 내일은 아마 학원 알바가 있어서 이것보단 못할 것 같다. 그래도 얼른 코딩테스트 입문 끝내고 코딩테스트 고득점 Kit도전해보고 싶다!

profile
긍정왕되기

0개의 댓글