프로그래머스

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

programmers.co.kr

import java.util.*;
class Solution {
    public int solution(int[][] triangle) {
        int answer = 0;
        
        int[][] dp = new int[triangle.length][];
        
        int N = triangle.length;
        for(int i = 0; i < N; i++){
            dp[i] = new int[i+1];
        }
        
        dp[0][0] = triangle[0][0];
        for(int i = 1; i < N; i++){
            for(int j = 0; j < i; j++){
                for(int k = j; k < j+2; k++){
                    dp[i][k] = Math.max(dp[i][k], triangle[i][k] + dp[i-1][j]);
                }
            }
        }
        
        Arrays.sort(dp[N-1]);
        answer = dp[N-1][N-1];
        
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

귤 고르기  (0) 2024.04.11
가장 먼 노드  (0) 2024.04.10
주차 요금 계산  (0) 2024.04.10
신고 결과 받기  (0) 2024.04.10
괄호 변환  (0) 2024.04.08

 

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;
class Solution {
    class Pair{
        int index;
        int value;
        public Pair(int idx, int val){
            index= idx;
            value = val;
        }
    }
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Map<Integer, Integer> map = new HashMap<>();
        
        for(int i = 0; i < tangerine.length; i++)
            if(map.putIfAbsent(tangerine[i], 1) != null)
                map.put(tangerine[i], map.get(tangerine[i]) + 1);
        
        List<Pair> list = new ArrayList<>();
        for(var q : map.keySet()) list.add(new Pair(q, map.get(q)));
        
        Collections.sort(list, (o1, o2) -> o1.value - o2.value);
        

        int exclude = tangerine.length - k;
        int i = 0;
        
        while(exclude > 0){
            int v = list.get(i).value;
            if(exclude < v) break;
            else{
                exclude -= v;
                i++;
            }
        }
        answer= list.size()-i;
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

정수 삼각형  (0) 2024.04.11
가장 먼 노드  (0) 2024.04.10
주차 요금 계산  (0) 2024.04.10
신고 결과 받기  (0) 2024.04.10
괄호 변환  (0) 2024.04.08

 

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;
class Solution {
    class Node{
        int node;
        int dist;
        public Node(int n, int d){
            node = n;
            dist = d;
            
        }
    }
    public int solution(int n, int[][] edge) {
        int answer = 0;
        
        List<List<Integer>> graph = new ArrayList<>();
        
        for(int i = 0; i < n+1; i++){
            graph.add(new ArrayList<>());
        }
        
        for(var k : edge){
            graph.get(k[0]).add(k[1]);
            graph.get(k[1]).add(k[0]);
        }
        
        Queue<Node> q = new LinkedList<>();
        boolean[] visited= new boolean[n+1];
        
        q.offer(new Node(1, 0));
        visited[1] = true;
        List<Integer> list = new ArrayList<>();
        while(!q.isEmpty()){
            Node cur = q.poll();
            
            for(int i = 0; i < graph.get(cur.node).size(); i++){
                int curNode = graph.get(cur.node).get(i);
                if(visited[curNode]) continue;
                visited[curNode] = true;
                
                q.offer(new Node(curNode, cur.dist+1));
                list.add(cur.dist+1);
            }
        }
        
        Collections.sort(list, Collections.reverseOrder());
        int max = list.get(0);
        for(var k : list){
            if(max != k) break;
            answer += 1;
        }
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

정수 삼각형  (0) 2024.04.11
귤 고르기  (0) 2024.04.11
주차 요금 계산  (0) 2024.04.10
신고 결과 받기  (0) 2024.04.10
괄호 변환  (0) 2024.04.08

 

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;
class Solution {
    static StringTokenizer st;
    int parseTimeToMin(String time){
        st = new StringTokenizer(time, ":");
        int hour = Integer.parseInt(st.nextToken());
        int min = Integer.parseInt(st.nextToken());
        
        return hour*60 + min;
    }
    
    int calcFee(int[] fees, int parkTime){
        if(fees[0] >= parkTime){
            return fees[1];
        }
        else{
            return fees[1] + (int)(Math.ceil((double)(parkTime-fees[0]) / (double)fees[2])) * fees[3];
        }
        
    }
    public int[] solution(int[] fees, String[] records) {
        int[] answer = {};
        
        Map<String, Integer> inOut = new TreeMap<>();
        Map<String, Integer> parkTime = new HashMap<>();
        
        
        for(int i = 0; i < records.length; i++){
            st = new StringTokenizer(records[i]);
            String time = st.nextToken();
            String carNum = st.nextToken();
            String enter = st.nextToken();
            
            parkTime.putIfAbsent(carNum, 0);
            
            // 입차인 경우
            if(enter.equals("IN")){
                inOut.put(carNum, parseTimeToMin(time));
            }
            // 출차인 경우
            else {
                int parkT = parseTimeToMin(time)-inOut.get(carNum);
                inOut.put(carNum, Integer.MAX_VALUE);
                
                parkTime.put(carNum, parkTime.get(carNum) + parkT);
            }
        }
        
        for(var k : inOut.keySet()){
            if(inOut.get(k) != Integer.MAX_VALUE){
                parkTime.put(k, parkTime.get(k) + (parseTimeToMin("23:59") - inOut.get(k)));
            }
        }
        
        answer = new int[inOut.keySet().size()];
        int i = 0;
        for(var k : inOut.keySet()){
            answer[i++] = calcFee(fees, parkTime.get(k)); 
        }
        return answer;
    }
}

 55.. 

 

카카오 코테는 map 사용 문제를 자주 내는 거 같아서 무의식적으로 이것도 해시맵으로 풀었다.

 

풀이를 보니 그냥 배열써도 됐는데.. 괜히 더 복잡하게 간 느낌 ..

'문제풀이 > 프로그래머스' 카테고리의 다른 글

귤 고르기  (0) 2024.04.11
가장 먼 노드  (0) 2024.04.10
신고 결과 받기  (0) 2024.04.10
괄호 변환  (0) 2024.04.08
양궁대회  (0) 2024.04.06

 

 

프로그래머스

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

programmers.co.kr

 

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        Map<String, ArrayList<String>> report_from = new HashMap<>();
        Map<String, Integer> report_count = new HashMap<>();
        
        for(int i = 0; i < id_list.length; i++){
            report_from.put(id_list[i], new ArrayList<>());
            report_count.put(id_list[i], 0);
        }
        
        
        ArrayList<String> list;
        boolean is_reported = false;
        for(int i = 0; i < report.length; i++){
            StringTokenizer st = new StringTokenizer(report[i]);
            String from = st.nextToken();
            String to = st.nextToken();
            
            list = report_from.get(from);
            if(list.isEmpty()){
                list.add(to);    
                report_count.put(to, report_count.get(to)+1);
            } else{
                is_reported = false;
                for(var q : list){
                   if(q.equals(to)) {
                       is_reported = true;
                       break;
                   }
                }
                
                if(!is_reported){
                    list.add(to);
                    report_count.put(to, report_count.get(to)+1);
                }
            }
        }
        
        for(int i = 0; i < id_list.length; i++){
            ArrayList<String> li = report_from.get(id_list[i]);
            for(int j = 0; j < li.size(); j++){
                if(report_count.get(li.get(j)) >= k) answer[i] += 1;
            }
        }
        
        return answer;
    }
}

 

37분..

'문제풀이 > 프로그래머스' 카테고리의 다른 글

가장 먼 노드  (0) 2024.04.10
주차 요금 계산  (0) 2024.04.10
괄호 변환  (0) 2024.04.08
양궁대회  (0) 2024.04.06
택배 배달과 수거하기  (0) 2024.04.06
 

프로그래머스

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

programmers.co.kr

import java.util.*;
class Solution {
    public String dfs(String s){
        // 1
        if(s.equals("")) return "";
        
        // 2
        int count = 0;
        int len = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '(') count += 1;
            else if(s.charAt(i) == ')') count -= 1;
            if(count == 0) {
                len = i+1;
                break;
            }
        }        
        String u = s.substring(0, len);
        String v = s.substring(len, s.length());
        
        
        // 3 
        count = 0;
        boolean flag = true;
        for(int i = 0; i < u.length(); i++){
            if(u.charAt(i) == '(') count += 1;
            else if(u.charAt(i) == ')') count -= 1;
            if(count < 0){
                flag = false;
                break;
            }
        }
        
        // 4
        if(flag){
            return u + dfs(v);
            
        } else{
            String t = "(" + dfs(v) + ")";
            String tmp = u.substring(1, u.length()-1);
            String result = "";
            for(int i = 0; i < tmp.length(); i++){
                if(tmp.charAt(i) == '(') result += ')';
                if(tmp.charAt(i) == ')') result += '(';
            }
            t += result;
            
            return t;
        }
    }
    public String solution(String p) {
        String answer = "";
        answer = dfs(p);
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

주차 요금 계산  (0) 2024.04.10
신고 결과 받기  (0) 2024.04.10
양궁대회  (0) 2024.04.06
택배 배달과 수거하기  (0) 2024.04.06
리코쳇 로봇  (1) 2024.04.05
 

프로그래머스

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

programmers.co.kr

class Solution {
    int[] arr;
    int[] lion = new int[11];
    int[] record = new int[11];
    int gap = Integer.MIN_VALUE;
    int N;
    boolean hasWin;
    
    int isLionWin(){
        int enemyScore = 0;
        int lionScore = 0;
        for(int i = 0; i < 11; i++){
            if(arr[i] == 0 && lion[i] == 0) continue;
            else if(arr[i] >= lion[i]){
                enemyScore += 10-i;
            } else lionScore += (10-i);
        }
        return lionScore - enemyScore;
    }
    
    void dfs(int pos, int depth){
        if(pos > 10) return;
        if(depth == N){
            int t = isLionWin();
            if(t > 0){
                hasWin = true;
                if(t > gap){
                    gap = t;
                    for(int j = 0; j < 11; j++){
                        record[j] = lion[j];
                    }
                }
                else if(t == gap){
                    for(int i = 10; i >= 0; i--){
                        if(record[i] < lion[i]){
                            for(int j = 0; j < 11; j++){
                                record[j] = lion[j];
                            }
                            break;
                    } else if(record[i] > lion[i]) break;
                    }  
                }
            }
            return;
        }
        if(lion[pos] > arr[pos]){
            dfs(pos+1, depth);
        }
        else{
            lion[pos] += 1;
            dfs(pos, depth+1);
            lion[pos] -= 1;
            
            dfs(pos+1, depth);
        }
    }
    public int[] solution(int n, int[] info) {
        int[] answer = {-1};
        arr = info;
        N = n;
        dfs(0, 0);
        answer = hasWin ? record : answer;
        
        return answer;
    }
}

 

95분.. 

무작정 코딩하다가 덕지덕지 코드가 더러워졌다.

 

50분정도 소요됐을 때 87.5점이 나왔었는데, 실제 코테였으면 다음 문제로 넘어가지 않았을까 싶다..

 

그 후로 멘탈이 나가서 45분동안 지옥의 디버깅으로 결국 잡아냄.. 

 

최대값이 갱신될 때 기존의 최대값이 아닌 배열과 비교해서

최대값인 배열이 반영이 안되는 거였다

 

매번 느끼지만 처음에 설계가 정말 중요하지 싶다..

 

그리고 lion이 아니라 ryan이었다

'문제풀이 > 프로그래머스' 카테고리의 다른 글

신고 결과 받기  (0) 2024.04.10
괄호 변환  (0) 2024.04.08
택배 배달과 수거하기  (0) 2024.04.06
리코쳇 로봇  (1) 2024.04.05
푸드 파이트 대회 Java  (0) 2024.02.28
 

프로그래머스

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

programmers.co.kr

package 프로그래머스.자바.택배배달과수거하기;
class Solution {
    public long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = -1;

        // 1. 투 포인터 각각 최대점부터 시작
        int d, p;
        d = p = n-1;

        // 2. 최대 거리를 저장할 변수
        int dist = 0;

        long result = 0;
        // 3. d, p가 모두 -1이 되면 멈춤
        while(d >= 0 || p >= 0){
            dist = Integer.MIN_VALUE;
            int count = cap;
            while(count > 0 && d >= 0){
                if(deliveries[d] > 0) {
                    dist = Math.max(dist, d);
                    deliveries[d] -= 1;
                    count--;
                } else d -= 1;
            }

            count = cap;
            while(count > 0 && p >= 0){
                if(pickups[p] > 0) {
                    dist = Math.max(dist, p);
                    pickups[p] -= 1;
                    count--;
                } else p -= 1;
            }

            if(dist == Integer.MIN_VALUE) break;
            result += (dist+1)*2;
        }


        answer = result;
        return answer;
    }
}

 

43분

언뜻 보기에 그리디문제 같아서 그리디하게 생각해보다보니

투포인터로 접근하게 되었다.

'문제풀이 > 프로그래머스' 카테고리의 다른 글

괄호 변환  (0) 2024.04.08
양궁대회  (0) 2024.04.06
리코쳇 로봇  (1) 2024.04.05
푸드 파이트 대회 Java  (0) 2024.02.28
공원 산책 Java  (0) 2024.02.26
 

프로그래머스

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

programmers.co.kr

import java.util.*;
class Solution {
    static int Rx, Ry, N, M, min = Integer.MAX_VALUE;
    static char[][] map;
    static boolean[][] visited;
    
    class Pair{
        int x;
        int y;
        int count;
        public Pair(int x, int y, int count){
            this.x =x;
            this.y = y;
            this.count = count;
        }
    }
    Queue<Pair> q = new LinkedList<Pair>();
    
    void bfs(Pair pq){
        q.offer(pq);
        int hop = 0;
        while(!q.isEmpty()){
            Pair p = q.poll();
            visited[p.x][p.y] = true;
            
            for(int i = 0; i < 4; i++){
                Pair rtn = move(p, i);
                if(map[rtn.x][rtn.y] == 'G'){
                    min = Math.min(rtn.count, min);
                    return;
                } else if(visited[rtn.x][rtn.y]){
                    continue;
                } else{
                    q.offer(rtn);
                }
            }
        }
    }

    
    static int[] dx = {0, 0, 1, -1};
    static int[] dy = {1, -1, 0, 0};
    // 하, 상, 우, 좌
    public Pair move(Pair p, int dir){
        int nx = p.x, ny = p.y;
        if(dir == 0){
            // 아래로 가는 경우 (y만 고려하면 됨)
            while(true){
                int nextPos = ny + dy[dir];
                // 
                if(nextPos < M && map[nx][nextPos] != 'D'){
                    ny = nextPos;
                } else break;
            }
        }
        else if(dir == 1){
            // 위로 가는 경우
            while(true){
                int nextPos = ny + dy[dir];
                if(nextPos > -1 && map[nx][nextPos] != 'D'){
                    ny = nextPos;
                } else break;
            }
        }
        else if(dir == 2){
            // 오른쪽으로 가는 경우
            while(true){
                int nextPos = nx + dx[dir];
                if(nextPos < N && map[nextPos][ny] != 'D'){
                    nx = nextPos;
                } else break;
            }
        }
        else if(dir == 3){
            while(true){
                int nextPos = nx + dx[dir];
                if(nextPos > -1 && map[nextPos][ny] != 'D'){
                    nx = nextPos;
                } else break;
            }
        }
        return new Pair(nx, ny, p.count+1);
    }
    public int solution(String[] board) {
        int answer = 0;
        N = board.length;
        M = board[0].length();
        map = new char[N][M];
        
        for(int i = 0; i < board.length; i++){
            String s = board[i];
            for(int j = 0; j < s.length(); j++){
                char c = s.charAt(j);
                if(c == 'R'){
                    map[i][j] = '.';
                    Rx = i;
                    Ry = j;
                }
                else map[i][j] = s.charAt(j);
            }
        }
        
        visited = new boolean[N][M];
        
        bfs(new Pair(Rx, Ry, 0));
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

양궁대회  (0) 2024.04.06
택배 배달과 수거하기  (0) 2024.04.06
푸드 파이트 대회 Java  (0) 2024.02.28
공원 산책 Java  (0) 2024.02.26
가장 가까운 같은 글자 Java  (0) 2024.02.26
package 프로그래머스.자바.푸드파이트대회;
import java.util.*;
class Solution {
    public String solution(int[] food) {
        String answer = "";

        StringBuilder sb = new StringBuilder();
        for(int i = 1; i < food.length; i++){
            for(int j = 0; j < food[i]/2; j++){
                sb.append(i);
            }
        }
        String s = sb.toString();
        String rev = sb.reverse().toString();
        answer = s + "0"+rev;
        return answer;
    }
}

'문제풀이 > 프로그래머스' 카테고리의 다른 글

택배 배달과 수거하기  (0) 2024.04.06
리코쳇 로봇  (1) 2024.04.05
공원 산책 Java  (0) 2024.02.26
가장 가까운 같은 글자 Java  (0) 2024.02.26
다단계 칫솔 판매 Java  (0) 2024.02.25

+ Recent posts