{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉해시〉간판 글자 재활용← 이전다음 →
#007 · 해시쉬움문자 빈도 카운팅,정규화

간판 글자 재활용

문제

간판 제작소는 새 간판을 만들 때 기존 간판의 글자 조각을 떼어 재배치 합니다. 글자 조각은 새로 만들 수 없고, 남겨서도 안 됩니다. 즉 기존 조각을 하나도 남김없이 모두 써서 새 문구를 완성할 수 있어야 재활용이 가능합니다.

간판에서 실제 조각으로 만들어지는 글자는 영문자와 숫자뿐 이며, 공백이나 기호(., ,, !, - 등)는 조각이 아니라 여백이라 무시합니다. 또한 조각은 뒤집어 끼울 수 있어 대소문자를 구분하지 않습니다 (a와 A는 같은 조각).

기존 간판 문구 oldSign과 새 간판 문구 newSign이 주어질 때, 기존 조각만으로 새 문구를 정확히 만들 수 있으면 true, 아니면 false를 반환하는 solution(oldSign, newSign) 함수를 작성하세요.

예시

oldSign = "Cafe Luna", newSign = "Fun Ace La"
→ true
  양쪽 모두 조각이 a 2개, c·e·f·l·n·u 각 1개로 완전히 같다.
 
oldSign = "Night Owls", newSign = "Wolf Sight"
→ false
  조각 수는 9개로 같지만 기존에는 n이 있고 새 문구에는 f가 필요하다.
 
oldSign = "Room 101!", newSign = "1 Moor 10."
→ true
  숫자도 조각이며, 기호와 공백은 무시된다.
 
oldSign = "   ", newSign = "!!!"
→ true
  양쪽 모두 조각이 하나도 없으므로 재활용이 성립한다.

제약 조건

  • 1 ≤ oldSign.length, newSign.length ≤ 50,000
  • 두 문자열은 출력 가능한 ASCII 문자로만 구성됩니다
  • 비교 대상은 영문자(대소문자 무시)와 숫자뿐이며, 그 외 문자는 모두 무시합니다
  • 한쪽만 조각이 없는 경우는 false입니다

시간 복잡도 목표: O(N)

테스트 케이스

예시 1: 공백·대소문자 무시하면 조각 구성이 같음
입력: oldSign = "Cafe Luna", newSign = "Fun Ace La"
출력: true
예시 2: 조각 수는 같지만 구성이 다름
입력: oldSign = "Night Owls", newSign = "Wolf Sight"
출력: false
예시 3: 숫자 조각 포함, 기호 무시
입력: oldSign = "Room 101!", newSign = "1 Moor 10."
출력: true
예시 4: 양쪽 모두 조각 없음
입력: oldSign = " ", newSign = "!!!"
출력: true
대소문자만 다른 경우
입력: oldSign = "ABC", newSign = "cab"
출력: true
엣지: 한쪽만 조각이 없는 경우
입력: oldSign = "a", newSign = " "
출력: false
길이는 같고 글자 빈도가 다른 경우
입력: oldSign = "aabb", newSign = "abbb"
출력: false
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.