public int solution(int[] numbers) {
        /*
        0부터 9까지 숫자 중 일부가 들어있는 배열 numbers가 매개변수
        * numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return
        *
        * 1. numbers 길이만큼 반복
        * 2. 0부터 9까지 들어있는 배열 tmp와 비교
        * 3. 숫자가 tmp에도 존재하면 삭제
        * 4. tmp에 남아있는 숫자 answer에 더해주기
        */
        int answer = 0;
        int[] tmp = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // numbers와 비교해서 없는 수를 남길 배열
        for(int i: numbers){ // numbers의 크기만큼 반복
            for(int j = 0; j < tmp.length; j++){ // tmp의 크기만큼 반복
                if(i == tmp[j]){ // numbers와 tmp 모두 가지고 있는 수라면
                    tmp[j] = 0; // tmp에서 삭제
                }
            }
        }
        for(int k = 0; k < tmp.length; k++){ // tmp의 크기만큼 반복
            answer += tmp[k]; // answer에 tmp에 남아있는 수를 더해준다
        }
        return answer;
}

그렇다. 반복문을 두번씩이나 돌리고싶지 않았는데...... 당장 생각나는게 저거밖에 없어서 걍 했다. 

 

그냥 0부터 9까지 다 더해져 있는 수에서 numbers랑 tmp에 같이 들어있는 수가 나오면 그 수를 빼주는 것도 나쁘지 않을 듯 하다. 일단 제출하고 다른 풀이를 좀더 봐야겠다. 

 

...

......

.........

 

 

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이걸 진짜 했다고....? 이런 미친ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

다음에 다시푼다 아ㅋㅋ

영어와 숫자가 섞인 문자열을 정수형으로 출력하는 문제. 

문자열이 너무 어려워서 결국 어떤 방식으로 푸는지 찾아봤다.....

기억에 남는 방식은 2가지 인데, 

1. 문자열을 선언해서 숫자(문자)를 정수형으로 대체

2. 해시맵을 선언해서 키를 딕셔너리로 대체

 

이중 내가 선택한 방법은 1번...

정확히 말하자면, zero, one 처럼 문자로 써있는 숫자를 0, 1 처럼 숫자로 이뤄진 문자열로 바꾸고, 이 문자열을 다시 정수형으로 바꿔주는 것이다. 에휴

 

처음에 생각했던 방식은 옛날에 염기서열 문제 했던것 처럼 문자열에서 숫자 문자열(예: one)을 잘라내서 비교하고 바꾸는 거였는데, 자바에는 replace()라는 좋은 메소드가 있으므로 비효율적이라 생각해서 그냥 1번으로 하기로 했다. 

 

public int solution(String s){
	
    int answer = 0;
    String[] num = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; // 문자로된 숫자를 바꿔줄 숫자
    String[] word = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; // 바꿔야 할 문자열
    System.out.println(s); // 문자열 s 출력
    for(int i = 0; i < num.length; i++){ // num의 길이만큼 반복(0~9)
    	s = s.replace(word[i], num[i]); // s에 word[i]가 존재한다면 num[i]로 치환
    }
    answer = Integer.parseInt(s); // s를 정수형으로 변환
    
    return answer;
}

여기서 주의해서 볼 부분은 문자열을 치환해주는 replace()와 문자열을 정수형으로 바꿔주는 parseInt()....

 

둘다 문자열이네?? 자바의 정석 사서 봐야되나 고민중이다. 

다음에 풀때는 해시맵으로도 풀 수 있게 공부해봐야지...!

우리 졸작 친구들과 알고리즘 스터디를 이번주부터 하기로 했는데...... 다들 백신 맞느라 아파서 다음주로 미뤄질듯

 

시험공부하기 싫어서 혼자 푸는데 깃헙에 올리면 애들이 신경쓰일거 같아서 블로그에만 살짝 올려본다...

 

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for(int i = 0; i < absolutes.length; i++){ // absolute와 signs의 길이는 같으므로 absolute의 길이만큼 반복
            if(signs[i] == true){ // signs가 참(양수)이라면
                answer += absolutes[i]; // absolute를 그냥 answer에 더해준다
            }
            else if(signs[i] == false){ // 거짓(음수)이라면
                answer += (-1) * absolutes[i]; // absolute에 -1을 곱해서 더해준다
            }
        }
        return answer;
    }
}

 

일단 맞았고 나중에 깃헙에 올려야겠따

 

 

다른 사람들 풀이를 보니 삼항연산자 쓴 풀이가 있어서 놀랐다. 이걸 생각 못했네......

(signs[i]? 1: -1)

signs[i]가 참이면 1을 곱해주고 거짓이면 -1을 곱해준다. 

왜 나는 이렇게 못하나 자책만 하지 말고 공부하는게 중요.... 메모메모

+ Recent posts