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 로직은 사용할 수 없어요. 오잔에게는 여러분의 도움이 필요해요!
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"
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
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"
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"
오잔은 새 친구를 만나서 두 사람의 취향이 얼마나 비슷한지 궁금해해요.
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"
Exercism에 가입하고 R 트랙을 개념 21개연습 문제 111개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.