알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

false이면 마이너스 , true이면 플러스
반복문 돌리면서 삼항연산자 이용해서 true이면 더하고 아니면 마이너스
for( sing[i] == true ? sum += absolutes[i] : sum -= absolutes[i];)


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

Review🤩

음수를 * -1로 이용


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

0안 더해도 되므로,반복문 1부터 다 더하고 1부터 9의 합인 45에서 빼도된다.
아니면 정렬하고 반복문 돌리면서 i값 if로 비교해서 없는 거 더해도된다.


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

Review🤩

전에 풀었음


 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 키패드 누르기  (0) 2022.08.10
[프로그래머스] 음양 더하기  (0) 2022.08.08
[프로그래머스] 내적  (0) 2022.08.08
[프로그래머스] 실패율  (0) 2022.08.08
[프로그래머스] K번째수  (0) 2022.08.02
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/70128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

내적

수학 에서 내적 또는 스칼라 곱 [참고 1]  두 개의 동일한 길이의 숫자 시퀀스(일반적으로 좌표 벡터 )를 취하고 단일 숫자를 반환하는 대수 연산 입니다.


Solution✍
	public static void main(String[] args) {
		// a [1,2,3,4] b [-3,-1,0,2] result 3
		// a [-1,0,1]  b [1,0,-1]    result -2
		int[] a = {1,2,3,4};
		int[] b = {-3,-1,0,2};
		
		int sum = 0;
		for(int i=0; i<Math.min(a.length, b.length); i++) {
			sum += a[i] * b[i];
		}
		System.out.println(sum);
	}

Review🤩

하라는대로 하면... 풀 수 있음..


 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 음양 더하기  (0) 2022.08.08
[프로그래머스] 없는 숫자 더하기  (0) 2022.08.08
[프로그래머스] 실패율  (0) 2022.08.08
[프로그래머스] K번째수  (0) 2022.08.02
[프로그래머스] 3진법 뒤집기  (0) 2022.07.29
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

import java.util.Arrays;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        float[] failper = new float[N]; // double까지 필요없어서 float 사용
        
        int chall = stages.length;
        int level = 1;

        // 스테이지별 실패율 구하는 부분
        while(chall > 0){ 
            int fail = 0;
            for(int i=0; i<stages.length; i++){
                if(stages[i] == level){ // 못깬사람의 스테이지 하고 level 같으면 실패 더해줌
                    stages[i] = 0; // 실패한 사람 0으로
                    fail++;
                }
            }

            if(fail == 0) { // 만약 실패 0이면 하나 남거나 나머지 다 성공했으므로 break
                break;
            }

           failper[level-1] = (float)fail / (float)chall;
           chall = chall - fail; // 분모의 수는 실패한 개수를 빼야하므로 넣어줌
           level++; // 레벨은 0~ 차근차근 올라가므로 마지막에 ++ 

        }

        // 실패율이 높은 레벨부터 내림차순
        for(int i=0; i<N; i++) {
            float max = -1; // max를 0으로 수정하면 값에 0이 있을경우 그 값과 비교 불가능 
            int deleteNum = 0;
            for(int j=0; j<N; j++) {
                if(failper[j] > max) {
                    max = failper[j];
                    deleteNum = j;
                }
            }

            answer[i] = deleteNum + 1;
            failper[deleteNum] = -1; // 이미 최고 실패율이면 -1로 바꿔주고 max값에 못들어가게
        }
        
        return answer;
    }
}

2번째 조건, 

모든 사용자가 마지막 스테이지에 있으므로 4번 스테이지의 실패율은 1이며 나머지 스테이지의 실패율은 0이다.

  • [4,1,2,3]

생각 안했을떄의 결과 63점 .. 중간에 코드를 수정한다고 해도 런타임 에러가 발생했으므로 코드 수정 필요

 

while문으로 length를 줄이는 부분에서 if(fail == 0) 부분도 가독성이 좋지 않고, 로직상 문제가 있어 런타임에러가 나기 때문에 리팩토링 필요


Solution✍
package kcue.test;
import java.util.Arrays;

public class failRate {

	public static void main(String[] args) {
        // 5 [2,1,2,6,2,4,3,3] [3,4,2,1,5]
        // 4 [4,4,4,4,4]       [4,1,2,3]
        // 3 [1,1,1]		   [0,0,0]
        // 5 [3,3,3,3]		   [3,1,2,4,5]         
        int N = 3;
        int[] stages = {1,1,1};
        /////////////////////////////////////////////////////////
	        int[] answer = new int[N];
	        
	        int chall = stages.length;
	        int level = 1;
	        
	        float[] failper = new float[N];
	        
	        for(int j=0; j<N; j++) {
	           int fail = 0;
	           for(int i=0; i<stages.length; i++){
	               if(stages[i] == level){
	                   stages[i] = 0; // 실패한 사람 0으로
	                   fail++;
	               }
	           }
	           if(chall == 0) {
	        	   break;
	           }
	           failper[level-1] = (float)fail / (float)chall;
	           
	           chall = chall - fail;
	           level++;
	           System.out.println("chall : " + chall + " , fail : " + fail + " , failper[] " + Arrays.toString(failper));
	        }
	        
	        // 실패율이 높은 레벨부터 내림차순
	        for(int i=0; i<N; i++) {
	        	float max = -1;
	        	int deleteNum = 0;
	        	for(int j=0; j<N; j++) {
	        		if(failper[j] > max) {
	        			max = failper[j];
	        			deleteNum = j;
	        		}
	        	}
	        	
	        	answer[i] = deleteNum + 1;
	        	failper[deleteNum] = -1;
	        	System.out.println(Arrays.toString(failper));
	        	}
	        }

}

반복문으로 바꾼후, chall의 length가 0이 되면 반복문을 멈추게 해준다.

안그러면 0으로 나눠서 NaN값을 배열에 담게 되므로 오류가 발생할 수 있음..


Review🤩

// 5 [3,3,3,3]    [3,1,2,4,5]  일때도 생각을해서 , 문제를 푸는것이 중요!


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

반복문 두개를 이용해서

2차원 배열을 구하고 replace개념으로 int를 바꿔준다!


Solution✍
import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for(int i=0; i<commands.length; i++){
            int[] tmp = new int[commands[i][1] - commands[i][0]+1];
            int cnt = 0;
            for(int j=commands[i][0] - 1; j<=commands[i][1] - 1; j++){
                tmp[cnt] = array[j];
                cnt++;
            }
            Arrays.sort(tmp); // 정렬 후 값

            answer[i] = tmp[commands[i][2]-1]; // 마지막 값
        }
        
        return answer;
    }
}

Review🤩
int[] tmp = Arrays.copyOfRange(array, 2,6);

copyofRange를 사용하면 array의 인덱스 배열 요소 일부를 복사해서 가져올 수 있다.

	        int commands[][] = {{2,5,3},{4,4,1},{1,7,3}};
    	    	int array[] = {1,5,2,6,3,7,4};
        	int[] answer = new int[commands.length];
			
	        for(int i=0; i<commands.length; i++){
	            int[] tmp = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
	            
	            Arrays.sort(tmp); // 정렬 후 값
	            System.out.println(Arrays.toString(tmp));
	            answer[i] = tmp[commands[i][2]-1]; // 마지막 값
	        }

중간 부분을 이런식으로 줄일 수 있음


 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 내적  (0) 2022.08.08
[프로그래머스] 실패율  (0) 2022.08.08
[프로그래머스] 3진법 뒤집기  (0) 2022.07.29
[프로그래머스] 두 개 뽑아서 더하기  (0) 2022.07.28
[프로그래머스] 2016년  (0) 2022.07.27
알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

10진수 -> 3진법

3진수 -> 10진법

으로 변환

진법 구하는 공식 참조 , 변환 시 reverse String이용

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        String str = "";
        
        while(n>0){
            str += (n%3);
            n = n / 3;
        }
        System.out.println(str);
        
        int exp = 0;
        // 거꾸로 반복문해야함
        for(int i=str.length()-1; i>0; i--){
            // 10진수로 바꾸기
            answer += Integer.parseInt(String.valueOf(str.charAt(i))) * Math.pow(3,exp);
            exp++;
        }
        
        return answer;
    }
}

Solution✍
class Solution {
    public int solution(int n) {
        
        int answer = 0;
        String str = "";
        
        // 3진법 변환        
        while(n > 0){
            str += n % 3;
            n = n / 3;
        }
        System.out.println(str);
        int digit = str.length() - 1;
        // 10진법 변환
        for(int i=0; i<str.length(); i++){
            answer += Integer.parseInt(String.valueOf(str.charAt(i))) * Math.pow(3, digit);
            digit--;
        }
        
        return answer;
    }
}

digit이라는 자릿수 변수를 놓고 인덱스 위치는 -1이 필요함

진법 변환하는 방법은 나머지를 이용해서 3진법으로 변환 시키고,

다시 10진법으로 변환 시킬때 , 예제를 보면서 규칙을 구하고 그 규칙을 코드로 작성


Review🤩

규칙 찾는게 오래걸렸음 ㅡ,.ㅡ


 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 실패율  (0) 2022.08.08
[프로그래머스] K번째수  (0) 2022.08.02
[프로그래머스] 두 개 뽑아서 더하기  (0) 2022.07.28
[프로그래머스] 2016년  (0) 2022.07.27
[프로그래머스] 최소직사각형  (0) 2022.07.27

+ Recent posts