[프로그래머스/JAVA] Lv.0 외계어 사전

또치·2023년 2월 11일
0

프로그래머스 JAVA

목록 보기
20/20
post-thumbnail

외계어 사전

🎇기억하고 싶은 부분🎇

replaceFirst
바꾸고 싶은 문자열이 처음 나왔을 때만 치환시켜준다.

🎯 문제

PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.

<제한사항>
spell과 dic의 원소는 알파벳 소문자로만 이루어져있습니다.
2 ≤ spell의 크기 ≤ 10
spell의 원소의 길이는 1입니다.
1 ≤ dic의 크기 ≤ 10
1 ≤ dic의 원소의 길이 ≤ 10
spell의 원소를 모두 사용해 단어를 만들어야 합니다.
spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두 개 이상 존재하지 않습니다.
dic과 spell 모두 중복된 원소를 갖지 않습니다.
spelldicresult
["p", "o", "s"]["sod", "eocd", "qixm", "adio", "soo"]2
["z", "d", "x"]["def", "dww", "dzx", "loveaw"]1
["s", "o", "m", "d"]["moos", "dzx", "smm", "sunmmo", "som"]2

🐻‍❄️ 답안

class Solution {
    public int solution(String[] spell, String[] dic) {
        int answer = 2;
        	   for(String str : dic) {
			   int count=0;
               // spell의 길이보다 짧으면 안됨
			   if(str.length()>=spell.length) {
				   for(String str2 : spell) {
					   str=str.replaceFirst(str2, "1");
				   }
				   for(int i=0; i<str.length(); i++) {
					   if(str.charAt(i)=='1') {
						   count++;
						   if(count==spell.length) {answer=1;}
					   }
				   }
				   
				   
				   
			   }
		   }
        return answer;
    }
}

🧶 과정

풀고나니까 생각보다 간단해보이는데 풀때는 진짜 오래걸렸어
일단 조건을 완벽히 이해를 못했어 spell의 원소를 한번씩만 사용해서 모두 사용해야된다!
한 번씩만 사용해야된다는건 무시하고 자꾸 모두 사용하게 하는 조건만 맞추니까 테스트 4번에서 계속 실패떠서 좀 하기싫어졌었다
일단 spell의 원소를 모두 사용해야되니까 dic의 원소의 길이가 spell보다 길거나 같아야되니까 if문해줬고
그 중에서 spell의 원소 한개씩 비교해주면서 같으면 다른글자로 교체해줬는데
여기서 replace 랑 replaceAll의 차이점을 알았다
나는 replace는 처음에 나온 동일 값만 치환시켜주고 replaceAll은 같은 모든 값을 치환하는 건줄 알았는데
둘다 조건과 동일한 값 모두를 치환시켜주는 거였다. 이 둘의 차이점은 replace는 첫번째 인자로 문자열을 입력받지만 replaceAll은 정규식을 받아서 치환시켜줄 수 있다는 거였다.

그래서 처음으로 replaceFirst 써봤다
이게 조건과 동일한 첫번째 값만 치환시켜주는거다!!
암튼 replaceFirst 사용해서 다른 문자열로 치환시켜줘서 혹시 spell의 원소가 중복되어 들어가있어도 치환되지 않게 해줬다!
그리고 이게 좀 구린것같긴한데 반복문 돌려서 원소가 대체문자를 가지고 있는 수를 카운트 해줬다.

0개의 댓글