프로그래머스

[TIL] 9월 11일

haseung22 2024. 9. 11. 20:01

내적구하기 

class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 0;
        
        // a와 b의 배열 길이는 같기 때문에
        // for문을 돌리면서  a의 i번방 값과 b의 i번방 값을 곱해서 곱한 값을
        // answer에 더하면서 대입
        for(int i = 0; i < a.length; i++){
                answer += a[i]*b[i];
        }
        return answer;
    }
}

실행 결과

a b result
[1,2,3,4] [-3,-1,0,2] 3
[-1,0,1] [1,0,-1] -2

 

약수의 개수와 덧셈

// 두 정수 left와 right가 매개변수로 주어집니다. 
// left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 
// 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for(int i = left; i <= right; i++){
            int measureNum = measure(i);
			
            // 받아온 약수의 개수가 짝수라면
            // answer에 left ~ right까지의 값중
            // i의 해당하는 값을 더하면서 대입
            if(measureNum % 2 == 0){
                answer += i;
            }
            //  홀수라면 빼면서 대입
            else{
                answer -= i;
            }
        }
        return answer;
    }
    
    // n ~ m까지의 값들을 하나 하나 받아서
    // 약수를 구하여 약수가 있다면 
    // cnt의 값을 증가시켜준 뒤 for문을 다 돌면
    // 약수의 개수만큼증가 시켜준 cnt를 리턴해줌
    public int measure(int n){
        int cnt = 0;
        for(int i = 1; i <= n; i++){
            if(n % i == 0){
                cnt++;
            }
        }
        return cnt;
    }
}

실행결과

약수 약수의 개수 결과
24 1,2,3,4,6,8,12,24 8 52
25 1,5,25 3
26 1,2,13,26 4
27 1,3,9,27 4

 

문자열 내림차순으로 배치하기

// 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 
// 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
// s는 영문 대소문자로만 구성되어 있으며, 
// 대문자는 소문자보다 작은 것으로 간주합니다.

import java.util.Arrays;
import java.util.Collections;
class Solution {
    public String solution(String s) {
        String answer = "";
        // 받아온 s문자열의 길이만큼의 배열 길이를 가진
        // String 빈 배열 만들어줌.
        String [] strArr = new String[s.length()];
		
        // 각 방에 한 문자씩 추출하여 넣어줌
        for(int i=0; i<strArr.length; i++){
            strArr[i] = s.charAt(i)+"";
        }
        // Arrays.sort와 Collections를 이용하여 내림차순 정렬
        Arrays.sort(strArr, Collections.reverseOrder());

		// 내림차 순 정렬을 시킨 배열에서 하나씩 뽑아내어
        // answer에 대입
        for(int i = 0; i < strArr.length; i++){
            answer += strArr[i];
        }
        return answer;
        }
}

실행결과

s return
"Zbcdefg" "gfedcbZ"

 

부족한 금액 계산하기

// 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 
// 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 
// 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
// 단, 금액이 부족하지 않으면 0을 return 하세요.

class Solution {
    public long solution(int price, int money, int count) {
        long answer = -1;
        long re = 0;
        
        // 일단 놀이기구를 타는 만큼 price의 n배 시키기 위하여
        // for문을 count수와 작거나 같을때 까지 반복시키면서
        // price에 1부터 count수 까지의 수를 하나하나 곱하면서
        // re에 누적 대입
        for(int i = 1; i <= count; i++){
            re += price * i; 
        }
        
        // 가지고 있는 돈에서 누적 대입했던 re를 뺀다.
        long result = money - re;
        
        // 가지고 있는 금액보다 많은 돈이 필요하다면
        // -가 될 것이기 때문에 -1값이 저장되어있는 
        // answer에 그 값을 곱해주면서 대입
        if(result < 0){
            answer *= result;
        }
        // 금액이 충분하다면 0 리턴
        else{
            answer = 0;
        }
        return answer;
    }
}

실행결과

price money count result
3 20 4 10

 

문자열 다루기 기본

// 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수,
// solution을 완성하세요. 
// 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

import java.util.regex.Pattern;
class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        // 숫자인지 확인하기 위한 정규식
        String reg = ("^[0-9]*$");
        
        // 문자열의 길이가 4 혹은 6이면서 숫자로만 이루어진 문자열이라면
        if(Pattern.matches(reg,s) && (s.length() == 4 || s.length() == 6)){
        // true 리턴
            return answer;
        }
        else{
        // 아니라면 false 리턴
            answer = false;
        }
        return answer;
    }
}

실행결과

s return
"a234" false
"1234" true

 

행렬의 덧셈

// 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 
// 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 
// 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

class Solution {
   public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = null;
        
        //arr1의 배열길이와 arr2의 배열길이가 500을 넘지 않는다면
        if(arr1.length <= 500 && arr2.length <= 500){
        // row와 low의 행의 길이와 열의 길이를 담는다.
            int row = arr1.length;
            int low = arr1[0].length;
            
            answer = new int[row][low];
            
            // arr1과 arr2의 행렬의 길이는 서로 같기 때문에
            for(int i = 0; i < row; i++){
                for(int j = 0; j < low; j++){
                // 각각 행에는 i를 열에는 j를 대입해주며 
                // arr1과 arr2의 행렬 덧셈의 결과를 answer 행렬에 담아준다.
                    answer[i][j] = arr1[i][j] + arr2[i][j]; 
                }
            }            
        }
        return answer;
    }
}

실행결과

arr1 arr2 return
[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]