프로그래머스 자바 DAY 9

윤소영·2023년 2월 18일
0

JAVA

목록 보기
2/41

map
HashMap 은 key와 value 값을 필요로 한다.
key를 통해 value 값을 출력할 수 있다.

문제를 예를 들면,,

keyvalue
.-a
-...b
-.-.c

이러한 식이다.


substring
substring은 지정해준 인덱스부터 끊어서 가져올 수 있다.

예를 들어 "안녕하세요"라는 string에서 index가 2부터 가져오게 하고 싶다면,,

string arr = "안녕하세요";
System.out.println(arr.substring(2));

결과는 하세요 가 출력된다.



toCharArray()
char[] toCharArray() 는 문자열을 문자배열로 변환해서 반환한다.


toString()
array를 string으로 변환해서 반환한다.


charAt()
string을 char로 변환해서 반환한다.


프로그래머스 가위바위보

class Solution {
    public String solution(String rsp) {
        String answer = "";
        int i = 0;
        for(; i < rsp.length(); i++){
            
            if(rsp.split("")[i].equals("2")){
                answer += "0";
            }
            else if(rsp.split("")[i].equals("0")){
                answer += "5";
            }
            else if(rsp.split("")[i].equals("5"))
                answer += "2";
        }
        return answer;
    }
}

처음에 string 자료형 문제 때문인지 string의 주소가 출력되는것 같았다.(맨처음에는 rsp을 쪼개줘야 한다는 생각도 못해서 if문 안에 rsp == "2" 이런식으로 써줬었다.)

그 다음에는 if문 안에 equals() 대신 == 을 사용해서 rsp과 "2" 이런식으로 비교를 해줬었다.
근데 출력이 ""로 빈 string이 출력되었다,,,

그래서 구글링을 통해 문자나 객체를 비교할 때는 == 대신 equals()를 사용해줘야 된다는 사실을 알게 되었고 그렇게 바로 해줬더니 됐다. (참고 링크텍스트)


프로그래머스 구슬을 나누는 경우의 수
처음에 생각해냈던 코드

int answer = 0;
        int[] num = new int[balls];
        int i = balls;
        for(i = balls; i >= 1; i--){
            num[num.length - i] = i;
        }
        int j = 0;
        int n = 1;
        for(j = 0; j < share; j++){
            n *= num[j]; 
        }
        int k = share;
        int[] kum = new int[share];
        for(k = share; k >= 1; k--){
            kum[kum.length - k] = k;
        }
        
        int t = 0;
        int a = 1;
        for(t = 0; t < share; t++){
            a *= kum[t];
        }
        return answer = n / a;

이랬더니 다양한 케이스에서 오류가 났었다.
아무리 생각해도 틀릴만한 케이스가 없다고 생각을 해서 그제서야 오버플로우가 났나,, 하고 생각하게 됐다.
처음에는 모든 변수에 long을 사용해야 할까 하다가 구글링의 힘을 받아 combination을 사용해서 함수 하나를 더 만들어보자 생각했고

class Solution {
    
    public static int combination(int n, int r){
        if(n == r || r == 0)
            return 1;
        else
            return combination(n-1, r-1) + combination(n-1, r);
    }
    public int solution(int balls, int share) {
        int answer = 0;
        return answer = combination(balls, share);
    }
}

다음과 같은 코드를 작성했다.

프로그래머스 문제를 풀면서 처음으로 오버플로우가 났던 문제라 당황했지만 앞으로 이런 문제가 더 많을 걸 알기에 더 공부해야겠다는 생각이 들었다...

0개의 댓글