728x90

 

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이 - 나의 생각

User ID 와 닉네임이 있는데

 

유저가 닉네임을 변경하면

 

지금까지 나왔던 기록에서

 

해당 유저의 닉네임이 다 변경해야 됩니다.

 

그러기 위해서는 2가지만 하면 됩니다.

 

1. 유저의 닉네임 기록

2. 유저의 최종 닉네임으로 기록 남기기

 

1. 유저의 닉네임 기록

 

 HashMap을 사용해서

 

유저별 최종 닉네임을 기록합니다.

 

2. 유저의 최종 닉네임으로 기록 남기기

 

User ID로 닉네임을 불러와 기록합니다.

 

 

코드

 

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        Map<String, String> nickname = new HashMap<>();
        StringBuilder sb = new StringBuilder();
        
        for(String r : record){
            String[] op = r.split(" ");
            if("Leave".equals(op[0])) continue;
            
            nickname.put(op[1], op[2]);
        }
        
        for(String r : record){
            String[] op = r.split(" ");
            switch (op[0]) {
                case "Enter":
                    sb.append(nickname.get(op[1]) + "님이 들어왔습니다.\n");
                    break;
                case "Leave":
                    sb.append(nickname.get(op[1]) + "님이 나갔습니다.\n");
                    break;
            }
        }
        return sb.toString().split("\n");
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이 - 나의 생각

스킬트리에

 

유저의 스킬(skill_tree.charAt[i]) 있어?

 

Yes

 

-> 순서 맞아?

 

Yes

skill.charAt[index] == skill_tree.charAt[i]

 

No

flag = false;

 

이런식으로 진행하면 됩니다.

 

 

코드

 

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0, index = 0;
        boolean flag = true;
        for(String skill_tree : skill_trees){
            flag = true;
            index = 0;
            for(String sk : skill_tree.split("")){
                if(skill.contains(sk)){
                    if(skill.charAt(index++) != sk.charAt(0)){
                        flag = false;
                        break;
                    }
                }
            }
            
            if(flag) answer++; 
        }
        return answer;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

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

 

프로그래머스

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

programmers.co.kr

 

풀이 - 나의 생각

튜플을 보면

 

숫자가 하나씩 늘어나는 것을 볼 수 있는데

 

길이가 늘어났을 때

 

새로운 숫자가

 

늘어난 길이 = index에 해당하는 값이다.

 

 

위의 그림처럼

 

문자열을 길이 순으로 정렬 하고 보면

 

바로 보일 것이다.

 

그래서 Set을 사용해서 새로운 값이라면 Answer에 값을 넣으면

 

정답이 나오는 것을 볼 수 있을 것이다.

 

풀이

 

주어지는게 문자열이 아니라 배열이였으면 더욱 쉬웠을 텐데

 

짜증나게 문자열로 주어진다.

 

"{{4,2,3},{3},{2,3,4,1},{2,3}}"

 

이렇게 주어지면

 

저걸 나누는게 1번이다.

 

이걸위해 split을 정규형과 함께 사용했다.

 

String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");


일단 첫번째, 두번째 "{" , 맨 뒤와 그 앞의 "}"을 substring으로 날립니다.

 

그러면

 

4,2,3},{3},{2,3,4,1},{2,3

 

이렇게 남겠죠?

 

그러면

 

나머지를 }, { 를 기준으로 나눠줍니다.

 

그러면 

 

4,2,3 / 3 / 2,3,4,1 / 2,3 으로 나눠지겠죠?

 

그럼 2번째 입니다.

 

나눠진 문자열의 길이 순으로 정렬을 해줍니다.

 

Arrays.sort(parts,(a,b) -> (a.length() - b.length()));

 

이렇게 하면

 

 3 / 2,3  / 4,2,3 / 2,3,4,1 순으로 정렬이 됩니다!

 

그러면 나머지는 식은 죽 먹기죠?

 

코드

 

import java.util.*;

class Solution {
    public int[] solution(String s) {
        /*
        중복 가능, 순서 의미 있음
        arr[배열의 길이-1]에서 새로운 값은 배열의 길이 - 1 위치한다.
        */
        String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");
        Set<String> set = new HashSet<>();
        int size = parts.length, index = 0;
        int[] answer = new int[size];
        Arrays.sort(parts,(a,b) -> (a.length() - b.length()));
        
        for(String part : parts){
            for(String num : part.split(",")){
                if(set.add(num)) answer[index++] = Integer.parseInt(num);
            }
        }
        
        return answer;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

+ Recent posts