알고리즘 문제풀이 -2

정현욱·2022년 5월 17일
0

6. 없는 숫자 더하기

https://programmers.co.kr/learn/courses/30/lessons/86051

입출력 예시

numbers       result
[1,2,3,4,6,7,8,0]    14
[5,8,4,0,6,7,9]     6

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

        return answer;
    }
}

문제풀이

1부터 9까지의 모든 숫자의 합은 45이므로 int answer = 45로 두고
0부터 number.length만큼 반복문을 돌려서 나오는 값을 answer에서 빼주면 없는 값의 합이 남는다

7.음양 더하기

https://programmers.co.kr/learn/courses/30/lessons/76501

입출력예시

absolutes     signs       result
4,7,12      true,false,true     9
1,2,3      false,false,true     0
signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
따라서 세 수의 합인 0을 return 해야 합니다.

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for (int i =0; i<absolutes.length; i++){
            if (signs[i] == true){
                answer += absolutes[i];
            }else {
                answer -= absolutes[i];
            }
        }
        return answer;
    }
}

문제풀이

absolutes배열 안에 들어있는 값이 양수면 더하고 음수면 빼주면 되는 문제
signs[i]가 ture면 양수 아니면 음수임으로 for문을 돌려서 각각 값을 찾고 조건문을 사용하여
양수면 더해주고 음수면 빼주면 된다.

8. 평균 구하기

https://programmers.co.kr/learn/courses/30/lessons/12944

입출력 예시

arr     return
[1,2,3,4]   2.5
[5,5]     5

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

문제풀이

평균은 각각의 값을 다 더해서 그 수만큼 나눠주면 구할 수있으므로
먼저 값을 더한것을 저장할 변수 sum을 선언(평균은 소수점이 나올 수 있어서 double타입으로 선언했다)
for문을돌려서 각각의 값을 구하고 그값을 sum에 각각 더해준다
그후 sum을 arr.legth로 나눠주면 평균값이나온다!

9.핸드폰 번호 가리기

https://programmers.co.kr/learn/courses/30/lessons/12948

입출력 예시
phone_number     return
"01033334444"   "***4444"
"027778888"     "*8888"

class Solution {
    public String solution(String phone_number) { 
        String answer = ""; 
        for(int i = 0; i < phone_number.length(); i++){ 
            if(i < phone_number.length()-4){ 
                answer += "*"; 
            } else{
                answer += phone_number.charAt(i); 
            } 
        }
        return answer; 
    } 
}

문제풀이

입력받은 phone_number의 값의 길이중 뒤에 4자리만 빼고 *로 표시하면 된다
1. for문을 이용해 phone_number의 길이만큼 반복
2. if문을 이용해 i가 phone_number의 길이에서 4를 뺀수보다 작을때까지 answer에*을 넣어준다
3. 위 조건이 아니라면 .charAt()메소드를 통해 문자를 하나씩 순서대로 넣어준다
charAt 사용법 -https://ddolcat.tistory.com/496

10. 행렬의 덧셈

https://programmers.co.kr/learn/courses/30/lessons/12950

입출력예시
arr1         arr2          return
[[1,2],[2,3]]   [[3,4],[5,6]]        [[4,6],[7,9]]
[[1],[2]]      [[3],[4]]         [[4],[6]]

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int [arr1.length][arr1[0].length];
        for (int i = 0; i<arr1.length; i++){
            for (int j=0; j<arr1[0].length; j ++){
                answer[i][j] = arr1[i][j] + arr2[i][j];
            }
        }
        return answer;
    }
}

문제풀이

arr1,arr2의 각 행과 열의 길이가 같음으로 i
같은 길이의 배열 int[ ][ ] answer = new int [arr1.lnegth][arr1[0].legnth]를 하나 선언
arr1의 행반큼 반복문을 돌리고 그후 arr1[0]의 열만큼 반복문을 돌려서
각각 값을 i,j로 가져온후
answer[i][j]의 값에 (arr1[i][j] + arr2[i][j])를 대입해주면 된다

profile
코린이

0개의 댓글