트랙
/
R
R
/
연습 문제
/
Ozan의 플레이리스트
Ozan의 플레이리스트

Ozan의 플레이리스트

학습 연습 문제

소개

R에는 별도의 집합 자료형이 없어요. 대신 벡터에 비슷한 연산을 수행하는 여러 함수를 사용해요.

%in% 연산자는 어떤 값이 집합에 속하는지 검사해요.

2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE

관련 함수로는 중복을 제거하는 unique, 그리고 두 집합을 대상으로 연산하는 union(), intersect(), setdiff(), setequal() 등이 있어요.

> set_1 <- c("a", "b", "c", "b", "a")
> unique(set_1) # deduplicate
[1] "a" "b" "c"

> set_2 <- c('a', "c", "d")
> union(set_1, set_2) # values in either set
[1] "a" "b" "c" "d"

> intersect(set_1, set_2) # values in both sets
[1] "a" "c"

> setdiff(set_1, set_2) # values in set_1 but not set_2
[1] "b"

> setdiff(set_2, set_1) # values in set_2 but not set_1
[1] "d"

setequal(set_1, c("c", "b", "a", "b")) # are elements the same after deduplication?
[1] TRUE

각 경우에 set_1과 set_2는 그대로 유지돼요.

지침

오잔은 곧 있을 로드트립을 위해 재생 목록을 만들고 있어요. 같은 트랙을 두 번 듣고 싶지는 않지만, 재생 목록이 너무 길어져서 어떤 트랙을 이미 추가했는지 기억하기 어려워졌어요.

오잔의 음악 플레이어 API는 벡터만 다룰 줄 알아요. 명시적인 루프나 if/else 로직은 사용할 수 없어요. 오잔에게는 여러분의 도움이 필요해요!

1. 중복된 트랙 제거하기

remove_duplicates 함수를 구현해요. 이 함수는 재생 목록을 _매개변수_로 받아서, 모든 트랙이 중복되지 않는 새로운 재생 목록을 반환해요.

> playlist <- c(
  "Court and Spark - Joni Mitchell",
  "Big Yellow Taxi - Joni Mitchell",
  "Court and Spark - Joni Mitchell"
)

> remove_duplicates(playlist)
[1] "Court and Spark - Joni Mitchell" "Big Yellow Taxi - Joni Mitchell"

2. 트랙이 이미 추가되었는지 확인하기

has_track 함수를 구현해요. 이 함수는 재생 목록과 트랙을 _매개변수_로 받아서, 재생 목록에 그 트랙이 들어 있는지 나타내는 불리언을 반환해요.

> playlist <- c(
  "The Fashion Show - Grace Jones",
  "Dr. Funkenstein - Parliament"
)

> has_track(playlist, "Dr. Funkenstein - Parliament")
[1] TRUE

> has_track(playlist, "Walking in the Rain - Grace Jones")
[1] FALSE

3. 트랙 추가하기

add_tracks 함수를 구현해요. 이 함수는 재생 목록과 하나 이상의 트랙으로 이루어진 벡터를 _매개변수_로 받아서, 그 트랙들을 포함하는 새로운 재생 목록을 반환해요.

> playlist <- c("Selma - Bijelo Dugme")

> playlist <- add_tracks(playlist, "Atomic Dog - George Clinton")
> playlist
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, "Selma - Bijelo Dugme")
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, c("The Chain - Fleetwood Mac", "Selma - Bijelo Dugme"))
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton" "The Chain - Fleetwood Mac"  

4. 트랙 삭제하기

delete_tracks 함수를 구현해요. 이 함수는 재생 목록과 하나 이상의 트랙을 _매개변수_로 받아서, 그 트랙들을 포함하지 않는 새로운 재생 목록을 반환해요.

> playlist <- c(
  "The Treasure - Fra Lippo Lippi",
  "After the Fall - Klaus Nomi"
)

> playlist <- delete_tracks(playlist, "The Treasure - Fra Lippo Lippi")
> playlist
[1] "After the Fall - Klaus Nomi"

> delete_tracks(playlist, "I Feel the Magic - Belinda Carlisle")
[1] "After the Fall - Klaus Nomi"

5. 재생 목록 비교하기

오잔은 새 친구를 만나서 두 사람의 취향이 얼마나 비슷한지 궁금해해요. find_common_tracks 함수를 구현해요. 이 함수는 두 개의 재생 목록을 받아서, 둘 다에 들어 있는 트랙만 담은 새로운 재생 목록을 반환해요.

> playlist_1 <- c("Karma - Taylor Swift", "Tired - Adele")
> playlist_2 <- c("Andromeda - Weyes Blood", "Karma - Taylor Swift")
> find_common_tracks(playlist_1, playlist_2)
[1] "Karma - Taylor Swift"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
R Exercism

Ozan의 플레이리스트 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 R 트랙을 개념 21개연습 문제 111개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.