문제
C# records는 값으로 비교됩니다: 두 records는 서로 다른 객체이더라도 모든 필드가 같으면 같습니다. 그래서 중복을 제거하기 쉽습니다.
각 record는 name,city로 작성됩니다. 두 필드 주변의 공백을 모두 제거하세요. 공백을 제거한 뒤에는 두 records의 두 필드가 모두 정확히 일치할 때(대소문자 구분) 같습니다.
unique_records(records)를 구현하세요.
Input
records: 레코드들, 순서대로.
Output
처음 나타나는 순서대로 distinct records를 반환하세요. 필드는 공백을 제거한 name,city 형식으로 작성합니다.
제약 조건
0 ≤ 레코드 수 ≤ 100,000
각 필드는 쉼표 없는 1~30자
예시
입력:
records = ["Ada,London", "Lin, Hanoi", "Ada , London"]
예상 출력:
expected = ["Ada,London", "Lin,Hanoi"]
입력:
std::vector<std::string> records = {"Ada,London", "Lin, Hanoi", "Ada , London"};
예상 출력:
std::vector<std::string> expected = {"Ada,London", "Lin,Hanoi"};
입력:
string[] records = new string[] {"Ada,London", "Lin, Hanoi", "Ada , London"};
예상 출력:
string[] expected = new string[] {"Ada,London", "Lin,Hanoi"};
설명
공백을 제거하면 세 번째 record는 첫 번째 record와 같으므로 제외됩니다: ["Ada,London", "Lin,Hanoi"].
입력:
records = ["ada,Paris", "Ada,Paris"]
예상 출력:
expected = ["ada,Paris", "Ada,Paris"]
입력:
std::vector<std::string> records = {"ada,Paris", "Ada,Paris"};
예상 출력:
std::vector<std::string> expected = {"ada,Paris", "Ada,Paris"};
입력:
string[] records = new string[] {"ada,Paris", "Ada,Paris"};
예상 출력:
string[] expected = new string[] {"ada,Paris", "Ada,Paris"};
설명
대소문자를 구분하므로 이 두 records는 다릅니다: ["ada,Paris", "Ada,Paris"].
접근 방법
먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.
힌트 1
비교하기 전에 두 필드의 공백을 모두 없애세요.
힌트 2
(name, city) 쌍의 set으로 이미 본 레코드를 기억하세요.
힌트 3
새 레코드는 처음 나타났을 때 입력 순서대로 출력하세요.
예상 복잡도
시간 O(전체 길이), 추가 공간 O(레코드 수)
참고 자료
이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.