Red Glitter Pointer

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 작성한 코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String[] arr = new String[numbers.length];
        
        for(int i = 0; i < numbers.length; i++) {
            arr[i] = String.valueOf(numbers[i]);
        }
        
        // 두 수를 합친 값을 기준으로 내림차순
        // o1 : 30, o2 : 5 일 경우, 305와 530 중 더 큰 값 비교
        Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
        
        // 정렬된 배열의 맨 처음이 0이라면 0으로만 되어있음. 0 반환
        return arr[0].equals("0") ? "0" : String.join("", arr);
    }
}

 

 

 

프로그래머스

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

programmers.co.kr

 

 

👇 내가 제출한 코드

import java.util.*;

class Solution {
    public long solution(int n, int[] times) {
        long answer = 0;
        Arrays.sort(times); // 이분 탐색을 위해 정렬

        long left = 0;
        long right = (long) n * times[times.length - 1]; // 최악의 경우 고려
        
        while(left <= right) {
            long mid = (left + right) / 2;
            
            long sum = 0; // 심사한 인원
            for(int time : times) {
                sum += mid / time;
            }
            
            // n명 심사해야하는데 못했다면, 시간이 더 필요하기 때문에 left 옮겨줌
            if(sum < n) left = mid + 1;
            // n명 이상 했다면 시간을 줄여서 최적의 시간을 확인해보기
            else {
                right = mid - 1;
                answer = mid;
            }
        }
        return answer;
    }
}

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 작성한 코드

import java.util.*;

class Solution {
    int[][] key = {
            {3, 1}, // 0
            {0, 0}, // 1
            {0, 1}, // 2
            {0, 2}, // 3
            {1, 0}, // 4
            {1, 1}, // 5
            {1, 2}, // 6
            {2, 0}, // 7
            {2, 1}, // 8
            {2, 2}, // 9
        };
        
    int[] leftLo = {3, 0}; // 현재 왼쪽 손가락의 위치
    int[] rightLo = {3, 2}; // 현재 오른쪽 손가락의 위치
    
    public String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();
        
        for(int n : numbers) {
            switch(n) {
                case 1: case 4: case 7:
                    answer.append("L"); // 왼손으로 누르기
                    leftLo = key[n]; // 왼쪽 손가락 위치 초기화
                    break;
                    
                case 3: case 6: case 9:
                    answer.append("R"); // 오른손으로 누르기
                    rightLo = key[n]; // 오른 손가락 위치 초기화
                    break;
                    
                default:
                    int leftDist = getDist(leftLo, key[n]); // 현재 왼손과 누를 숫자의 거리 구하기
                    int rightDist = getDist(rightLo, key[n]); // 상동
                    
                    if(leftDist < rightDist || (leftDist == rightDist && hand.equals("left"))) {
                        answer.append("L");
                        leftLo = key[n];
                    } else {
                        answer.append("R");
                        rightLo = key[n];
                    }
                    break;
            }
        }
        return answer.toString();
    }
    
    // 현재 위치와 누를 숫자의 거리 구하는 메소드
    public int getDist(int[] key1, int[] key2) {
        return Math.abs(key1[0] - key2[0]) + Math.abs(key1[1] - key2[1]);
    }
}

 

 

느낀 점 및 정리 ✍️

1. 재밌게 풀었따 

 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 작성한 코드

import java.util.*;

class Solution {
    public String solution(String new_id) {
        String answer = new_id.toLowerCase();
        
        answer = answer.replaceAll("[^-_.a-z0-9]", ""); // 2단계
        answer = answer.replaceAll("[.]{2,}", "."); // 3단계
        answer = answer.replaceAll("^[.]|[.]$", ""); // 4단계
        
        // 5단계
        if(answer.equals("")) answer += "a";
        
        // 6단계
        if(answer.length() >= 16) {
            answer = answer.substring(0, 15);
            answer = answer.replaceAll("[.]$", "");
        }
        
        // 7단계
        if(answer.length() <= 2) {
            while(answer.length() < 3) answer += answer.charAt(answer.length() - 1);
        }
        
        return answer;
    }
}

 

 

느낀 점 및 정리 ✍️

1. 단계 별로 진행하였고, replaceAll과 정규표현식을 사용하였다.

2. [^-_.a-z0-9] ^ 다음에 오는 정규표현식이 아닌 문자들을 공백으로 바꿔주었다. 

3. {} 는 문자가 나오는 횟수. {2,} 은 적어도 2번 나온다는 것을 의미한다

4. ^[.]|[.]$ 는 .으로 시작 or 끝나는 것을 의미함

5. 조금만 안해도 까먹는 정규표현식 ㅠ 달달 외워야겠다.... 너무 편하다 !

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 풀이한 코드

import java.util.*;
import java.io.*;

class Solution {
    static int n, m;
    static int[] dr = {-1, 0, 1, 0};
    static int[] dc = {0, 1, 0, -1};
    
    public int solution(int[][] maps) {
        n = maps.length;
        m = maps[0].length;
        boolean[][] visited = new boolean[n][m];
        Queue<int[]> q = new LinkedList<>();
        
        visited[0][0] = true;
        q.offer(new int[] {0, 0});
        
        while(!q.isEmpty()) {
            int[] cur = q.poll();
            int x = cur[0];
            int y = cur[1];
            
            for(int d = 0; d < 4; d++) {
                int nx = dr[d] + x;
                int ny = dc[d] + y;
                
                if(nx >= 0 && nx < n && ny >= 0 && ny < m && !visited[nx][ny] && maps[nx][ny] == 1) {
                    visited[nx][ny] = true;
                    maps[nx][ny] = maps[x][y] + 1;
                    q.offer(new int[] {nx, ny});
                }
            }
        }
        return maps[n - 1][m - 1] == 1 ? -1 : maps[n - 1][m - 1];
    }
}

 

느낀 점 및 정리 ✍️

1. 최단 거리 구하기 문제라서 BFS 이용하여 풀었다.

2. 이동할 예정인 maps의 위치가 1이라면, 현재 위치해있는 maps 자리의 숫자에서 1을 더해주어 거리를 구해준다.

3. 삼항연산자를 이용하여 정답 return 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

👇 내가 풀이한 코드

import java.util.*;
import java.io.*;

class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        long num = Long.parseLong(p);
        
        for(int i = 0; i < t.length() - p.length() + 1; i++) {
            if(t.charAt(i) <= p.charAt(0)) {
                String temp = t.substring(i, i + p.length());
                if(num >= Long.parseLong(temp)) answer++;
            }
        }
        return answer;
    }
}

 

 

느낀 점 및 정리 ✍️

1. 숫자 길이의 조건을 확인하지 않아서 처음에는 int로 진행했었다가 런타임 에러가 발생했다. 조건 재확인 후 Long으로 바꿈.. ㅎㅋ

2. p와 t의 첫번째 숫자를 비교하여 숫자가 같거나 작을 경우에만 substring을 진행하도록 하였다. (조금이나마 시간복잡도를 줄이기 위한 노력..)

 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

👇 내가 작성한 코드

SELECT f.id AS ID
        , n.fish_name AS FISH_NAME
        , f.length AS LENGTH
FROM fish_info AS f
JOIN fish_name_info AS n
ON f.fish_type = n.fish_type
WHERE (f.fish_type, f.length) IN (
    SELECT fish_type, MAX(length)
    FROM fish_info
    GROUP BY fish_type
)
ORDER BY ID

 

 

느낀 점 및 정리 ✍️

1. JOIN과 SubQuery를 사용하여 풀었다.

2. fish_type 별로 최대 길이를 찾고, 이 최대 길이를 가진 데이터와 테이블을 조인하여 해당 물고기의 정보를 가져온다.

 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

👇 제출한 코드

 

SELECT ROUTE
    , CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE
    , CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUND(SUM(D_BETWEEN_DIST), 1) DESC


-- 기존 작성했던 코드는 아래와 같다.
SELECT ROUTE
    , CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE
    , CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY TOTAL_DISTANCE DESC

 

느낀 점 및 정리 ✍️

1. 기존 작성했던 코드는 아래에 ORDER BY TOTAL_DISTANCE DESC 인데, 제출하면 계속 틀렸다고 나와서 뭐때문인지 알 수가 없었다 .. . 검색해보니 CONCAT을 사용해서 문자열을 붙여주면, 정렬 시 제대로 정렬이 안된다고 한다 ㅠ 

 

 

 

+ Recent posts

loading