본문 바로가기

코딩 테스트 문제 풀이/프로그래머스 lv 0

프로그래머스 코딩 테스트(lv 0) 문제 풀이 - 2

배열 두 배 만들기

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        int i=0;
        for(int num : numbers){
            answer[i]= num*2;
            i++;
        }
        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 int solution(int[] dot) {
        int answer = 0;

        int x = dot[0] > 0 
                ? 1
                : 0;
        int y = dot[1] > 0
                ? 1
                : 0;
                        
            if(x==1 && y==1){answer=1;}
            else if(x==0 && y==1){answer=2;}
            else if(x==0 && y==0){answer=3;}
            else if(x==1 && y==0){answer=4;}
        return answer;
    }
}

 

 

아이스 아메리카노

class Solution {
    public int[] solution(int money) {
        int[] answer = new int[2];
        int i = 0;
        while(true){      
            if(money < i*5500){
                break;
            }else{
                answer[0] = i;
                answer[1] = money-(5500*i);
            }
            i++;    
        }
        return answer;
    }
}

굳이 복잡하게 할 필요 없이, 잔 수와 남는 돈을 연산자 /, % 를 이용하여 계산했으면 됐다.

 

 

삼각형의 완성 조건(1)

import java.util.*;

class Solution {
    public int solution(int[] sides) {
        int answer = 0;
        Arrays.sort(sides);
        
        answer = sides[sides.length-1] < sides[0]+sides[1]
            ?1
            :2;
        return answer;

        //가장 큰 변이 두변의 합에 해당하는 수보다 작아야 삼각형 가능
    }
}

 

 

문자 반복 출력하기

class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        String s;
        for(int i=0;i<my_string.length();i++){
            s = String.valueOf(my_string.charAt(i));
            answer += s.repeat(n);
        }
        return answer;
    }
}

이 문제는 문자열을 다루는 클래스들이 많아 풀이 방법이 다양하게 있었다.

자주 사용하는 내부 함수에 대해서 메모해두고 다 외우지는 못하더라도 어떤 클래스에 어떤 기능이 있는지 정도는 인지하고 있을 필요가 있을 것 같다.

 

 

편지

class Solution {
    public int solution(String message) {
        return (message.length())*2;
    }
}

 

 

특정 문자 제거하기

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

유용하게 사용할 수 있는 내부함수들이 많이 있는 것 같다.

 

 

짝수는 싫어요

class Solution {
    public int[] solution(int n) {
        int Arraylength = n%2==0
            ? n/2
            : (n/2)+1;
        int[] answer = new int[Arraylength];
        int OddNum = 1;
        for(int i=0;i<Arraylength;i++){
            answer[i]=OddNum;
            OddNum+=2;
        }
        return answer;
    }
}

배열의 사이즈를 지정해줘야만 하는 불편함을 덜기 위해서, ArrayList 클래스를 많이들 사용하는 것 같다.

제너릭스에 대해서 아직 모르기 때문에 쓰지 않고 있었는데 조금은 사용해 볼 필요가 있다

 

 

제곱 수 판별하기

class Solution {
    public int solution(int n) {
        for(int i=1; i*i<=n;i++){
            if(i*i==n){return 1;}
        }
        return 2;
    }
}

반복문으로 해당 제곱 수를 판별하도록 코드를 작성했는데, 알고보니 내부 함수 중에 제곱 수를 판별하여 Boolean 타입으로 받을 수 있는 Math.sprt() 가 존재하였다. 메모해두고 사용해야겠다.

 

 

자릿 수 더하기

class Solution {
    public int solution(int n) {
        int answer = 0;
        String str= String.valueOf(n);
        for(int i=0; i<str.length();i++){
            answer += Integer.parseInt(str.substring(i,i+1));
        }
        return answer;
    }
}

 

직관적으로 한자리씩 나누어서 계산을 진행했는데, 연산자 %와 /를 이용한 방법도 존재했다. 사고를 유연히 가져야겠다.

 

 

배열의 유사도

class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        for(String str : s1){
            for(String str2 : s2){
                if(str.equals(str2)){answer++;}
            }
        }
        return answer;
    }
}

 

 

문자열 안에 문자열

class Solution {
    public int solution(String str1, String str2) {
        str1.contains(str2);
        if(str1.contains(str2)){
            return 1;
        }else{return 2;}
    }
}

좀 더 간단하게 삼항연산자를 사용하여 한 줄로 줄인 후에, 바로 리턴 값으로 넘겨줄 수 있었을 것 같다. 

 


 

2주차 후기

내부 함수의 중요성에 대해서 깨닫는 계기가 되었다.

내가 알고 있는 기능들에 대해서도 온전히 활용하고 있지 못하다는 생각이 든다.

삼항 연산자나, 사칙 연산자들에 대해서도 더 다양하게 활용하여 코드를 작성할 수 있었을 것이다.

좀 더 유연한 사고로 어떻게 하면 더 간단한 코드를 작성할 수 있을지 고민해봐야겠다.

 

다른 사람들의 풀이를 보면 stream 이라는 함수를 많이 사용하는데, 어떻게 사용하는지 궁금하다.

자바의 정석 후반부에 나와있는 것 같은데 빨리 진도를 나가봐야겠다.

 

 

이번 주에는 스파르타 코딩클럽 웹개발 종합반 과정을 수강하는 관계로 자바 쪽에 많이 신경을 쓰지 못했다.

해당 과정을 모두 완료하였기 때문에 3주차에는 자바에 좀 더 무게를 두고, 코테 문제도 많이 풀어볼 생각이다.