[12일 차] 알고리즘 (Basic4)

2025. 2. 11. 11:53·LG 유플러스 유레카/알고리즘

25/02/11 (화)

국민취업지원제도 상담을 받고와서 1시간 30분 지각을 했습니다.

드디어 상담 3회가 끝났습니다.

앞으로는 지각, 결석할 일이 없겠네요.

상담 끝나고 맥날 먹고싶은데 맥모닝 시간이고, KFC는 안열고, 중국집도 안열고, 김밥천국은 안먹고싶고..

그냥 버스타고 왔습니다. 매우 배고프네요..


 

1.  교재 강의

1.1. Ch07 큐

  • 상담때문에 못들었습니다

 

1.1. Ch08 해시

1) 해시의 특성을 활용하는 분야

  • 비밀번호 관리
  • 데이터베이스 인덱싱 : 데이터베이스에 저장된 데이터를 효율적으로 검색할 때
  • 블록체인

 

1.2. Ch09 트리

1) 트리

 

2) 이진 트리

package basic.Ch12_Tree;

import java.util.ArrayDeque;
import java.util.Queue;

public class BinaryTreeSearch {

    // 완전이진트리(complete binary tree) vs 포화이진트리(perfect  binary tree)
	/*
	 				1
	 		2			   3
	  4        5      6         7
   8    9   10  11  12  13    14   15
	 */

    // 이진 트리를 배열로
    static int[] tree = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; // 0 dummy
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) {
        bfs(1);
        System.out.println(sb);

        sb.setLength(0);

        dfs(1);
        System.out.println(sb);

    }

    static void bfs(int idx) {
        Queue<Integer> queue = new ArrayDeque<>();
        queue.offer(idx);

        while( ! queue.isEmpty() ) {

            int curIdx = queue.poll();
            sb.append(tree[curIdx]).append(" ");

            // 꺼낸 노드의 자식 노드 방문
            int lcIdx = curIdx*2;
            int rcIdx = curIdx*2 + 1;

            // range check
            if( lcIdx < tree.length ) queue.offer(lcIdx);
            if( rcIdx < tree.length ) queue.offer(rcIdx);
        }
    }

    static void dfs(int idx) {
        // 기저조건
        if( idx >= tree.length ) return;

        sb.append(tree[idx]).append(" ");

        // 현재 노드의 자식 노드 방문
        // 왼쪽
        dfs(idx*2);
        // 오른쪽
        dfs(idx*2 + 1);
    }
}

 

2. 실습

1) 카드 뭉치 (큐)

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        Queue<String> cardsDeque1 = new ArrayDeque<>(Arrays.asList(cards1));
        Queue<String> cardsDeque2 = new ArrayDeque<>(Arrays.asList(cards2));
        Queue<String> goalDeque = new ArrayDeque<>(Arrays.asList(goal)); //완성할 기준
        
        while(!goalDeque.isEmpty()){
            if(!cardsDeque1.isEmpty() && cardsDeque1.peek().equals(goalDeque.peek())) { //card1에서 가능한지
                cardsDeque1.poll();
                goalDeque.poll();
            }else if(!cardsDeque2.isEmpty() && cardsDeque2.peek().equals(goalDeque.peek())) {
                cardsDeque2.poll();
                goalDeque.poll();
            }else {
                break;
            }
        }
        return goalDeque.isEmpty() ? "Yes" : "No";
        
    }
}

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

 

2) 오픈 채팅방 (해시)

import java.util.ArrayList;
import java.util.HashMap;

class Solution {
    public String[] solution(String[] record) {
        HashMap<String, String> msg = new HashMap<>();
        msg.put("Enter", "님이 들어왔습니다.");
        msg.put("Leave", "님이 나갔습니다.");
        
        HashMap<String, String> uid = new HashMap<>();
        
        for(String s : record) {
            String[] cmd = s.split(" ");
            if(cmd.length == 3){
                uid.put(cmd[1], cmd[2]);
            }
        }
        
        ArrayList<String> answer = new ArrayList<>();
        
        for (String s : record) {
            String[] cmd = s.split(" ");
            
            if(msg.containsKey(cmd[0])) {
                answer.add(uid.get(cmd[1]) + msg.get(cmd[0]));
            }
        }
        return answer.toArray(new String[0]);
    }
}
  • 유저 아이디가 유일한 식별자이다.
  • 닉네임이 변경되는 건 "Enter" 와 "Change" 이다.
  • 최종 출력은 "Change" 가 제외된 "Enter" 와 "Leave" 에 대해서만 처리된다.

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

 

3) 랜선 자르기 (이진 트리)

package basic;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class S2_1654_Lan {
    static int K, N;
    static long left, right, mid;
    static int[] input;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        K = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());

        input = new int[K];

        for (int i = 0; i < K; i++) {
            input[i] = Integer.parseInt(br.readLine());
        }

        // 풀이
        // N 길이 1 ~ 가장 큰 값

        Arrays.sort(input);

        left = 1; // 길이 최소
        right = input[K-1]; // 길이 최대

        while( left <= right ) {
            long count = 0;

            // 중간값으로 계산
            mid = (left + right ) / 2;

            // 모든 K 개에 대해서 mid 로 잘라 본다.
            for (int i = 0; i < K; i++) {
                count += ( input[i] / mid ); // 나눈 몫 0, 1.7 = 1, 2.3 = 2
            }

            if( count >= N ) { // N 개 보다 더 많이 만드는 게 아니고 가장 큰 N 개
                left = mid + 1;
            }else {
                right = mid - 1;
            }
        }

        System.out.println(right);
//      System.out.println(left - 1);
    }
}

 

4.  마무리

1) 더 공부할 것

  • 버퍼리더
  • 토크나이저
  • 전부 다..

'LG 유플러스 유레카 > 알고리즘' 카테고리의 다른 글

[13일 차] 알고리즘 (Basic5)  (0) 2025.02.12
[11일 차] 알고리즘 (Basic3)  (0) 2025.02.10
[10일 차] 알고리즘 (Basic2)  (0) 2025.02.07
'LG 유플러스 유레카/알고리즘' 카테고리의 다른 글
  • [14일 차] 알고리즘 (Basic6)
  • [13일 차] 알고리즘 (Basic5)
  • [11일 차] 알고리즘 (Basic3)
  • [10일 차] 알고리즘 (Basic2)
문태신
문태신
꾸준함은 모든 것을 이긴다.
  • 문태신
    별 될 시간
    문태신

  • 전체
    오늘
    어제
    • 전체 글 (123) N
      • LG 유플러스 유레카 (110) N
        • 강의 정리 (1)
        • 소프트웨어 엔지니어링 (8)
        • 알고리즘 (13)
        • 데이터베이스 활용 (5)
        • 미니 프로젝트 1 (3)
        • 데이터베이스 심화 (5)
        • 프론트엔드 이해 (3)
        • 깃허브 특강 (2)
        • 취업 특강 (2)
        • 스프링 프레임워크 (17)
        • REST API (10)
        • 미니 프로젝트 2 (7)
        • 프로젝트 기획 분석 설계 (5)
        • 애자일 방법론 (5)
        • 종합 프로젝트 (15)
        • 클라우드 특강 (3)
        • 최종 융합 프로젝트 (5) N
        • 회고 (1)
      • 알고리즘 공부 (5)
      • 자바 공부 (3)
      • 자격증 (2)
      • 디자인 (2)
      • 감상문 (1)
        • 책 (0)
        • 영화 (1)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
문태신
[12일 차] 알고리즘 (Basic4)
상단으로

티스토리툴바