모든 챌린지
쉬움 0명 해결 정답률 0%

중복 없는 레코드

값이 같은 중복 레코드를 제거하고, 각 값의 첫 번째 항목만 순서대로 유지합니다.

배우게 될 내용

  • 레코드를 값으로 비교하기
  • 순서를 유지하며 중복 없애기
  • 공백을 없애 필드 정규화하기

문제

원문 보기 (영어)

C# records는 값으로 비교됩니다: 두 records는 서로 다른 객체이더라도 모든 필드가 같으면 같습니다. 그래서 중복을 제거하기 쉽습니다.

각 record는 name,city로 작성됩니다. 두 필드 주변의 공백을 모두 제거하세요. 공백을 제거한 뒤에는 두 records의 두 필드가 모두 정확히 일치할 때(대소문자 구분) 같습니다.

unique_records(records)를 구현하세요.

Input

records: 레코드들, 순서대로.

Output

처음 나타나는 순서대로 distinct records를 반환하세요. 필드는 공백을 제거한 name,city 형식으로 작성합니다.

제약 조건

0 ≤ 레코드 수 ≤ 100,000

각 필드는 쉼표 없는 1~30자

예시

예시 1
입력:
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"].

예시 2
입력:
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에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.

다른 사람의 풀이 보기

커뮤니티 솔루션

아직 공개된 풀이가 없습니다. 문제를 풀고 첫 풀이를 공유하세요.