반응형

연습문제 : 기사단원의 무기 Lv1

 

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

 

프로그래머스

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

programmers.co.kr

 

약수 개수 구하기 시간초과 피하기 문제로

1 ~ N 까지 전부 검증을 하는 방법 O(n) 이 아닌 √N지 구하는 방식으로 처리

class Solution {
    public int solution(int number, int limit, int power) {
        int answer = 0;
        int[] factors = new int[number+1];
        
        //  약수 개수 구하기
        for(int n = 1;n<=number;n++){
            int cnt = 0;

            for(int i=1;i * i <=n;i++){
                if(i * i == n) {
                    cnt++;
                } else if(n % i == 0) {
                    cnt += 2;
                }
            }

            factors[n] = cnt;
        }

        for(int i=1;i<=number;i++) {
            if(factors[i] > limit) answer += power;
            else answer += factors[i];
        }
        
        return answer;
    }
}

 

참고 : ※ https://chwan.tistory.com/entry/Java-%EC%95%BD%EC%88%98%EC%9D%98-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

햄버거 만들기  (0) 2024.03.20
크레인 인형뽑기 게임  (0) 2024.03.19
[1차] 비밀지도  (0) 2024.03.18
대충 만든 자판  (0) 2024.03.14
체육복  (0) 2024.03.13
반응형

2018 KAKAO Blind recruitment > [1차] 비밀지도 Lv.1

 

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

 

프로그래머스

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

programmers.co.kr

 

// Integer.toBinaryString(arr[1], arr[2]) 함수 활용해서 다시 풀이 해봐야 하는 문제

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];

        String[][] map = new String[n][n];
        String[][] map2 = new String[n][n];

        for(int i=0;i<arr1.length;i++){
            int number = arr1[i];
            int number2 = arr2[i];
            int x = n-1;
            int x2 = n-1;

            while(x >= 0){
                if(number % 2 == 0) map[i][x] = " ";
                else map[i][x] = "#";

                number = number /2;
                x--;
            }


            while(x2 >= 0) {
                if(number2 % 2 == 0) {
                    map2[i][x2] = " ";
                } else {
                    map2[i][x2] = "#";
                }

                number2 = number2 / 2 ;
                x2--;
            }
        }
        
        for(int i=0;i<n;i++){
            answer[i] = "";

            for(int j=0;j<n;j++){
                if(map[i][j].equals("#") || map2[i][j].equals("#")){
                    answer[i] += "#";
                } else {
                    answer[i] += " ";
                }
            }
        }
        
        return answer;
    }
}

 

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

크레인 인형뽑기 게임  (0) 2024.03.19
기사단원의 무기  (0) 2024.03.18
대충 만든 자판  (0) 2024.03.14
체육복  (0) 2024.03.13
피로도  (1) 2024.03.11
반응형

 

대충 만든 자판 : Lv.1

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이)

HashMap<Character, Integer> keyPad 에 문자 자판값을 key로, 클릭 최소 값을 설정

HashMap에 자판값이 설정되면 target 값을 해쉬맵을 통해 카운트 처리

 

import java.util.HashMap;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        
        int[] answer = new int[targets.length];

        HashMap<Character, Integer> keyPad = new HashMap<>();

        for(int i=0;i<keymap.length;i++){
            for(int j=0;j<keymap[i].length();j++){
                char key = keymap[i].charAt(j);

                if(keyPad.containsKey(key)){
                    int idx = keyPad.get(key);
                    keyPad.put(key, Math.min(idx, j+1));
                } else {
                    keyPad.put(key, j+1);
                }
            }
        }

        for(int i=0;i<targets.length;i++){
            String targetKey = targets[i];
            int cnt =0;
            boolean hasKey = true;

            for(char curKey : targetKey.toCharArray()){
                if(keyPad.containsKey(curKey)){
                    cnt += keyPad.get(curKey);
                } else {
                    hasKey = false;
                    break;
                }
            }

            answer[i] = hasKey ? cnt : -1;
        }
        
        return answer;
    }
}

 

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

기사단원의 무기  (0) 2024.03.18
[1차] 비밀지도  (0) 2024.03.18
체육복  (0) 2024.03.13
피로도  (1) 2024.03.11
호텔 대실  (0) 2024.03.09
반응형

Greedy 알고리즘로 접근하여 풀이 필요

프로그래머스 : 체육복 Lv.1

 

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

 

프로그래머스

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

programmers.co.kr

 

import java.util.Arrays;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        // 체육복 가지고 있는 학생
        int result = n - lost.length;

        Arrays.sort(lost);
        Arrays.sort(reserve);

        // 1. 여벌 체육복을 가져왔지만 도난 당한 학생 수
        // 즉, 다른 학생에게 빌려줄 수 없음
        for(int i=0;i<lost.length;i++){
            for(int j=0; j<reserve.length;j++){
                if(lost[i] == reserve[j]){
                    result++;
                    lost[i] = -1;
                    reserve[j] = -1;
                    break;
                }
            }
        }

        // 2. 도난 당했지만 체육복을 빌릴 수 있는 학생 수
        for(int i=0;i<lost.length;i++){
            for(int j=0;j<reserve.length;j++){
                if(lost[i] - 1 == reserve[j] || lost[i] + 1 == reserve[j]){
                    result++;
                    reserve[j] = -1;
                    break;
                }
            }
        }
        
        return result;
    }
}

 

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[1차] 비밀지도  (0) 2024.03.18
대충 만든 자판  (0) 2024.03.14
피로도  (1) 2024.03.11
호텔 대실  (0) 2024.03.09
로또의 최고 순위와 최저 순위  (0) 2024.03.08
반응형

리버스 프록시(Reverse Proxy) 란?

리버스 프록시란 클라이언트와 웹 서버 간의 중개자 역을 하는 서버이다. 클라이언트와 서버로 부터 받은 요청과 응답을 전달해주는 역할을 한다.

 

리버스 프록시는 이를 통해 웹 서버 부하를 분산하고 보안을 강화하는 등 다양한 기능을 수행할 수 있다.

 

기본적인 작동 원리는 클라이언트에서 요청을 리버스 프록시로 보내고 리버스 프록시는 요청을 웹 서버에 전달한다. 웹 서버는 요청된 데이터를 처리한 후 리버스 프록시에게 응답을 보내고 리버스 프록시는 웹 서버로부터 받은 응답을 클라이언트에게 전달하는 방식으로 동작한다.

 

리버스 프록시는 웹 서버/WAS 앞에 놓여 있는 것을 말한다.

(포워드 프록시는 클라이언트 앞에 놓여져 있는 것을 말한다.)

 


리버스 프록시 장점

  • 서버 부하 분산 (Load balancing)
    • 웹 서비스에 동시에 많은 사용자가 접속 시,
    • 서버에 부하가 집중되어 성능 저하 및 서비스 중단이 발생 할 수 있다. 리버스 프록시는 들어오는 요청을 여러대의 서버로 분산시켜 각 서버의 부하를 줄이고, 서버의 가용성을 높여 안정적인 서비스 제공이 가능하다.
  • 보안 강화
    • 외부에서 직접 서버에 접근하지 못하도록 웹 서비스의 보안을 강화한다. 클라이언트는 인터넷을 통해 리버스 프록시 서버 url 에게 요청을 하며 리버스 프록시는 본서버에게 요청을 경유해서 보내게 된다. 이렇게 되면 클라이언트는 본 서버의 url을 모른채 서비스를 이용하게 되고 본 서버의 정보를 숨기는 효과를 본다.
  • 캐싱 및 가속
    • 리버스 프록시는 자주 사용되는 정적 파일들을 캐시에 저장하여 제공한다. 이를 통해 응답시간을 단축시켜 웹 서비스 성능을 향상 시킨다.

오픈 소스 리버스 프록시 솔루션

  • NGINX
  • HAProxy

※참조
https://aday7.tistory.com/entry/리버스-프록시Reverse-Proxy-쉽게-이해하기-개념부터-필요성-오픈-소스-솔루션까지

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

반응형

+ Recent posts