CodeingTestPrac/Java Coding Test

코테 연습[자바 코테 준비 11일차] , BFS(2) ,String Join

sung.hyun.1204 2023. 7. 5. 12:18

네트워크 연결 수 파악  문제 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

1. 연결 된것은 같은 네트워크 그룹이다.

2. 연결이 없는 노드도 네트워크 개수의 포함이 된다.

 

-> 0 번 커퓨터 부터 n-1 번 컴퓨터까지 bfs 를 적용하여 방문 기록을 체크 해준다.

 

import java.util.*;

class Solution {
    public int solution(int n, int[][] computers) {
        boolean[] visited = new boolean[n];

        int count = 0 ;

        Queue<int[]> q = new LinkedList<>();

        for(int i = 0 ;i<n;i++) {
            if(visited[i]) continue;
            q.offer(computers[i]);
            visited[i] = true;
            while (!q.isEmpty()){
                int[] way = q.poll();
                for(int j = 0 ; j < n;j++){
                    if(way[j] == 1 && !visited[j]){
                        q.offer(computers[j]);
                        visited[j] = true;
                    }
                }
            }
            count++;
        }

        return count;
    }
}

 

 

꽤 오래 걸렸다.   , 불필요한 추가 적인 메모리나 루프 없이 푸는 것 이 필요하다 라고 느꼈다. -> 코드가 깔끔해진다.

 

 

 

TIL  ) 

answer = participantName.keySet().toString().replace("]","").replace("[","");
answer = String.join("", participantName.keySet());

문자열 배열에서 "이름"  만출력할때     

 

"["이름"]" 에서 힘들게 괄호를 지우지 말고

 

String 의 Api 에서 join 을 사용하자.

 

 

문제 : 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

public String solution(String[] participant, String[] completion) {
        String answer = "Error"; // 완주 s
        Map<String,Integer> participantName = new HashMap<>();
        for(String name : participant) {
            participantName.put(name,participantName.getOrDefault(name,0)+1);
        }
        for(String name:completion){
            int checkNumber =  participantName.get(name);
            if(checkNumber > 1) {
                participantName.put(name,checkNumber - 1);
                continue;
            }
            participantName.remove(name);
        }

        answer = String.join("", participantName.keySet());
        return answer;
    }