Menu
Coddy logo textTech

벡터 연산과 리사이클링

Coddy R 여정의 기초 섹션에 포함된 레슨 — 78개 중 69번째.

길이가 같은 두 벡터 사이에서 산술 연산을 수행할 때, R은 각 요소를 일대일로 대응시켜 연산을 적용합니다:

a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)

출력:

[1] 11 22 33

하지만 벡터의 길이가 서로 다르면 어떻게 될까요? R은 **재사용(recycling)**이라고 불리는 동작을 사용합니다. 짧은 벡터가 긴 벡터의 길이에 맞춰 반복됩니다:

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

출력:

[1]  10 200  30 400  50 600

여기서 multiplier는 곱셈이 수행되기 전에 c(10, 100, 10, 100, 10, 100)가 되도록 재사용(recycled)되었습니다. 이는 단일 값으로 연산할 때 특히 유용합니다:

prices <- c(10, 20, 30)
print(prices * 1.1)

출력:

[1] 11 22 33

단일 값 1.1prices의 길이에 맞춰 재사용(recycle)됩니다. 긴 벡터의 길이가 짧은 벡터 길이의 배수가 아닐 때는 주의하십시오. R은 여전히 연산을 수행하지만, 부분 재사용(partial recycling)에 대한 경고를 생성할 수 있기 때문입니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 받게 됩니다:

  1. 기준 값들을 나타내는 쉼표로 구분된 숫자 목록 (예: 10,20,30,40,50,60)
  2. 곱할 값(multipliers)들을 나타내는 쉼표로 구분된 숫자 목록 (예: 2,5)

벡터 산술 연산과 재사용(recycling) 규칙을 사용하여 다음을 수행하세요:

  1. 기준 값들로 숫자 벡터를 생성합니다.
  2. 곱할 값들로 숫자 벡터를 생성합니다.
  3. 기준 값 벡터에 곱할 값 벡터를 곱합니다 (R은 더 짧은 벡터를 재사용합니다).
  4. 곱셈 결과를 출력합니다.
  5. 원래의 기준 값 벡터의 각 요소에 100을 더합니다 (단일 값 재사용).
  6. 덧셈 결과를 출력합니다.
  7. 기준 값 벡터에서 곱할 값 벡터를 뺍니다.
  8. 뺄셈 결과를 출력합니다.

예를 들어, 입력이 다음과 같다면:

5,10,15,20,25,30
3,7

출력은 다음과 같아야 합니다:

[1]  15  70  45 140  75 210
[1] 105 110 115 120 125 130
[1]  2  3 12 13 22 23

설명:

  • 곱셈: 곱할 값 벡터 c(3, 7)c(3, 7, 3, 7, 3, 7)로 재사용되어, 5*3, 10*7, 15*3, 20*7, 25*3, 30*7의 결과가 나옵니다.
  • 덧셈: 단일 값 100이 재사용되어 각 요소에 더해집니다.
  • 뺄셈: 곱할 값 벡터가 다시 재사용되어, 5-3, 10-7, 15-3, 20-7, 25-3, 30-7의 결과가 나옵니다.

치트 시트

길이가 서로 다른 벡터 간에 산술 연산을 수행할 때, R은 재사용(recycling)을 사용합니다. 즉, 짧은 벡터가 긴 벡터의 길이에 맞춰 반복됩니다.

numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)

출력:

[1]  10 200  30 400  50 600

multiplier 벡터는 곱셈이 수행되기 전에 c(10, 100, 10, 100, 10, 100)으로 재사용됩니다.

단일 값 재사용은 특히 유용합니다:

prices <- c(10, 20, 30)
print(prices * 1.1)

출력:

[1] 11 22 33

1.1이라는 값은 prices의 길이에 맞춰 재사용됩니다.

참고: 긴 벡터의 길이가 짧은 벡터 길이의 배수가 아닐 경우 R에서 경고 메시지가 발생할 수 있습니다.

직접 해보기

# 입력 읽기
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# 쉼표로 구분된 값을 숫자 벡터로 파싱
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])

# TODO: 아래에 코드를 작성하세요
# 1. base_values에 multipliers를 곱하기 (재사용 규칙이 자동으로 적용됨)
# 2. 곱셈 결과 출력
# 3. base_values의 각 요소에 100 더하기
# 4. 덧셈 결과 출력
# 5. base_values에서 multipliers 빼기
# 6. 뺄셈 결과 출력
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨