티스토리 뷰
Problem
International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows:
'a' maps to ".-",
'b' maps to "-...",
'c' maps to "-.-.", and so on.
For convenience, the full table for the 26 letters of the English alphabet is given below:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
Given an array of strings words where each word can be written as a concatenation of the Morse code of each letter.
- For example, "cab" can be written as "-.-..--...", which is the concatenation of "-.-.", ".-", and "-...". We will call such a concatenation the transformation of a word.
Return the number of different transformations among all words we have.
Example 1:
Input: words = ["gin","zen","gig","msg"]
Output: 2
Explanation: The transformation of each word is:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
There are 2 different transformations: "--...-." and "--...--.".
Example 2:
Input: words = ["a"]
Output: 1
Constraints:
- 1 <= words.length <= 100
- 1 <= words[i].length <= 12
- words[i] consists of lowercase English letters.
Solution
주어진 단어를 모스 코드로 변환한 뒤 서로 다른 모스코드의 개수를 구하는 문제입니다.
import java.util.HashSet;
import java.util.Set;
public class Solution {
private static final String[] MORSE_CODES = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-", "-.--", "--.."};
public int uniqueMorseRepresentations(String[] words) {
Set<String> uniqueMorseRepresentations = new HashSet<>();
for (String word : words) {
StringBuilder stringBuilder = new StringBuilder();
for (char c : word.toCharArray()) {
stringBuilder.append(MORSE_CODES[c - 'a']);
}
uniqueMorseRepresentations.add(stringBuilder.toString());
}
return uniqueMorseRepresentations.size();
}
}
단어를 순차적으로 탐색하면서 단어의 각 단어를 모스부호로 변환하여 붙이고 Set을 이용해 unique한 모스 부호의 개수를 확인할 수 있습니다.
Test
package io.lcalmsky.leetcode.unique_morse_code_words;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class SolutionTest {
@Test
void testAll() {
assertAll(
() -> test(new String[]{"gin", "zen", "gig", "msg"}, 2),
() -> test(new String[]{"a"}, 1)
);
}
private void test(String[] given, int expected) {
// when
Solution solution = new Solution();
int actual = solution.uniqueMorseRepresentations(given);
// then
assertEquals(expected, actual);
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
871. Minimum Number of Refueling Stops (0) | 2022.08.20 |
---|---|
1338. Reduce Array Size to The Half (0) | 2022.08.19 |
387. First Unique Character in a String (0) | 2022.08.17 |
13. Roman to Integer (0) | 2022.08.13 |
235. Lowest Common Ancestor of a Binary Search Tree (0) | 2022.08.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gRPC
- Spring Boot JPA
- 함께 자라기
- 헥사고날 아키텍처
- 스프링 데이터 jpa
- r
- intellij
- JPA
- 스프링 부트
- 스프링부트
- leetcode
- 클린 아키텍처
- @ManyToOne
- Jackson
- 함께 자라기 후기
- 스프링 부트 애플리케이션
- Linux
- spring boot app
- proto3
- Java
- JSON
- spring boot jwt
- 스프링 부트 회원 가입
- spring boot application
- 알고리즘
- QueryDSL
- Spring Data JPA
- Spring Boot Tutorial
- 스프링 부트 튜토리얼
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함