본문 바로가기
알고리즘/Java

프로그래머스 A로 B 만들기(Java) - HashMap, putIfAbsent, put

by eunjineee 2023. 8. 30.

🖥️문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

🎀해결 방법

처음 생각한 방법은 before을 돌면서 after에서 한 글자씩 지우는 방법

하지만 replace가 제대로 돌지 않았다

스터디원들에게 물어서 replaceFirst를 사용해서 해결했다.

 

딕셔너리로 푸는 방법도 고민했으나 방법을 잘 몰라서 도전하지 못했는데

책에 있는 방법을 사용해서 풀었다. 

"HashMap을 사용한 딕셔너리 만들기"  방법으로 해결!

 

✨replace - 실패

import java.util.HashMap;
import java.util.Map;

public class P_35_120886 {
    //처음 생각했던 방법이었으나, replace를 잘못 사용함
    public static Integer solution(String before, String after){
        for (char b : before.toCharArray()){
            if (after.contains(String.valueOf(b))) {
                after.replace(b,' ');     // replace된 단어를 저장해주지 않음!
            } else {
                return 0;
            }
        }
        for (char a : after.toCharArray()){
            if (a != ' '){
                return 0;
            }
        }
        return 1;
    }

    public static void main(String[] args) {
        System.out.println(solution("olleh","hello"));
        System.out.println(solution("allpe","apple"));
    }
}

 

✨replace 재지정 - 성공

import java.util.HashMap;
import java.util.Map;

public class P_35_120886 {

    public static Integer solution(String before, String after){
        for (char b : before.toCharArray()){
            if (after.contains(String.valueOf(b))) {
                String bb = String.valueOf(b);
                after = after.replaceFirst(bb," ");  // replaceFirst를 사용해 대체하고, replace된 단어를 재지정해준다
            } else {
                return 0;
            }
        }
        for (char a : after.toCharArray()){
            if (a != ' '){
                return 0;
            }
        }
        return 1;
    }

    public static void main(String[] args) {
        System.out.println(solution("olleh","hello"));
        System.out.println(solution("allpe","apple"));
    }
}

 

✨HashMap -통과

import java.util.HashMap;
import java.util.Map;

public class P_35_120886 {

    // hashmap을 dictionary로 사용하는 방법
    public static Map<Character, Integer> toMap (String word){
        Map<Character, Integer> map = new HashMap<>();
        for (char c : word.toCharArray()) {
            map.putIfAbsent(c, 0);        // putIfAbsent : KEY가 없으면 넣고,있으면 넣지 않기
            map.put(c, map.get(c) + 1);   // put : KEY가 없으면 그대로 넣기
        }
        return map;
    }

    public static Integer book_solution(String before, String after) {
        return toMap(before).equals(toMap(after)) ? 1:0;
    }

    public static void main(String[] args) {
        System.out.println(book_solution("olleh","hello"));
        System.out.println(book_solution("allpe","apple"));
    }
}

 

 

 

 

 

'알고리즘 > Java' 카테고리의 다른 글

[Java 언어] HashSet  (0) 2023.08.15
(Java) 문자의 배열과 아스키코드, StringBuilder 사용법  (0) 2023.07.20