1. 문제 설명
- 주어진 패턴과 문자열
s가 주어졌을 때, s가 동일한 패턴을 따르는지 확인합니다.
- 여기서 따르기란, 패턴의 문자와
s의 비어있지 않은 단어 사이에 일대일 대응이 있는 경우를 말합니다.

2. 접근 방법
- Key : Value로 저장할 Map를 생성합니다.
- 문자열
pattern, s을 배열로 만들어 비교하기 편하게 만듭니다.
- 먼저 패턴의 개수가 다르면 오답이 되므로 문자열을 배열로 만든
p와 str의 길이를 비교하여 다르면 false를 반환합니다.
- 패턴의 길이만큼 반복문을 순회하며 조건문으로 패턴 알파벳
p가 map에 있는지 Key값으로 조회를 합니다.
- 조회 데이터가 없다면 새로운 패턴
p : str 을 map에 Key : Value 값으로 저장합니다.
- 이때
pattern = "abba", s = "dog dog dog dog" 와 같은 조합의 패턴이 올 경우 패턴 a와 b는 똑같은 패턴을 저장하게 되어 에러가 납니다. 에러를 방지하기 위해 데이터를 저장하기 전에 해당 Value가 있는지 확인하고 저장합니다. 만약 Value가 이미 존재한다면 false를 반환합니다
- 조회 데이터가 있다면 해당 패턴 알파벳을 key값으로 Value를 조회하여
str값이 같은지 비교하여 다르면 false를 반환합니다.
- 반복문이 무사히 끝나면 패턴이 같아 true를 반환합니다.
3. 구현 코드
class Solution {
public boolean wordPattern(String pattern, String s) {
Map<String, String> map = new HashMap<>();
String[] p = pattern.split("");
String[] str = s.split(" ");
if(p.length != str.length)
return false;
for(int i = 0; i < p.length; i++){
if(map.containsKey(p[i])){
if(!map.get(p[i]).equals(str[i]))
return false;
}
else{
if(!map.containsValue(str[i]))
map.put(p[i], str[i]);
else
return false;
}
}
return true;
}
}
- 시간 복잡도: O(n)
- 공간 복잡도: O(n)
4. 개선 사항
5. 최종 회고
6. 참고