2021년 1학기 R입문 중간고사
- 1. R을 이용하여 다음을 계산하여라. (3점)
- 2. 다음을 잘 읽고 물음에 답하라. (2점)
- 3. $x=(-10,-9,-8,\dots,8,9,10)$에 대하여 $h(g(f(x)))$의 계산결과를 구하는 코드를 작성하라. (10점)
- 4. 아래중 옳은것은? (O / X 로 답안지를 쓰고 답의 근거가 되는 코드를 작성할것) (10점)
- 5. 다음을 읽고 물음에 답하라. (10점)
- 6. 다음 문장을 읽고 참거짓을 판단하시오. (10점)
- 7. 100개의 라커 (15점)
- 8. 무궁화 꽃이 피었습니다. (25점)
- 9. 다음을 잘 읽고 시각화 하라. (15점)
2^(-5) + 2^2
sqrt(33)
k = c(1:100)
sum(1/(k^2+2*k+1))
x <- c(seq(-10,10,0.5))
x
ifelse(abs(x)>5,x, ifelse(abs(x)<=2,0,5))
단, $f(x)$,$g(x)$, $h(x)$의 정의는 각각 아래와 같다.
- $f(x)=2x+3 $
- $g(x)=\frac{e^x}{1+e^x}$
- $h(x)=max(x,0)$
library(tidyverse)
x = c()
f <- function(x) 2*x + 3
g <- function(x) exp(x)/(1+exp(x))
h <- function(x) ifelse(x>0,x,0)
for (i in -10:10){
x = f(i) %>% g %>% h
print(x)
}
f = function(x) 2*x +3
g = function(x) exp(x) / (1+exp(x))
h = function(x) ifelse(x>0,x,0)
-10:10 %>% f %>% g %>% h
f = function(N){
a<-c()
a[1]=0.5
for(n in 2:N) a[n]=a[n-1]*0.5
sum(a)
}
for(k in 5:20)
print (c(f(k)))
g = function(x, N){
a<-c()
a[1] = x
for(n in 2:N) a[n]=a[n-1]*x
sum(a)+1
}
x=2
for (k in 5:20)
print (c(exp(x)-g(x,k)))
다음은 어느 회사의 연봉에 대한 규정이다.
(가) 입사 첫째 해 연봉은 $a$원이고, 입사 19년째 해까지의 연봉은 해마다 직전 연봉에서 8%씩 인상된다.
(나) 입사 20년째 해부터의 연봉은 입사 19년째 해 연봉의 75%로 한다.
이 회사에 입사한 사람이 28년동안 근무하여 받는 연봉의 총합은?
sal <- c()
sal[1] <- 1
for(i in 2:19){
sal[i] = sal[i-1]*1.08
}
sal
for (i in 20:28){
sal[i] = sal[19]*0.75
}
sal
sum(sal)
_a <- 2
a
F
False
c <- c('A', 'B')
print (x=c)
class(x=c)
False
d <- c(F, T)
print(x=d)
class(x=d)
d = as.numeric(d)
d
class(x=d)
True
False
복도에 100개의 라커가 있다. 복도를 어떤 남자가 100개의 라커 문을 전부 연다. 그리고 나서 짝수 번호의 라커를 전부 닫는다. 그 다음에는 번호가 3의 배수인 라커를 순서대로 찾아다니며 열려 있으면 닫고, 닫혀 있으면 연다. 그 다음에는 번호가 4의 배수인 라커를 순서대로 찾아다니며 열려있으면 닫고, 닫혀있으면 연다. 이후에 5의 배수, 6의 배수 .. 인 라커를 순서대로 찾아다니며 행동을 반복한다. 이런식으로 복도를 100번 지나가면 열린 라커의 문은 몇개가 되겠는가?
x = rep(FALSE, 100)
g <- function(x,a){
n=length(x)
x[(1:n) %% a == 0] <- x[(1:n) %% a == 0] %>% f
x
}
x=f(x)
for (i in 2:100){
x=g(x,i)
}
x
sum(x)
총 456명의 참가자가 '무궁화 꽃이 피었습니다' 게임에 참가한다. 기본적인 게임의 규칙은 아래와 같다.
-
술래는 총 10회간 벽을 보고 '무궁화 꽃이 피었습니다' 를 외친다.
-
참가자는 술래가 있는 곳 까지 이동해야 살 수 있다.
-
술래는 벽을 보고 '무궁화 꽃이 피었습니다'를 외치다가 구호가 끝남과 동시에 뒤를 돌아본다. 이때 움직이는 사람은 죽는다
따라서 참가자는 술래가 벽을 보고 '무궁화 꽃이 피었습니다'를 외치는 동안만 이동할 수 있다. 욕심을 부려 더 이동하고자 하면 죽을 수 있다. 반대로 죽는 것을 지나치게 두려워한 나머지 매턴마다 조금씩만 이동한다면 10회의 제한횟수 내에 술래에게 도달하지 못하여 죽는다.
게임환경과 관련된 세부적인 설정은 아래와 같다.
-
술래와 참가자의 거리는 35이다.
-
술래는 처음 벽을 보고 $x$초간 무궁화 꽃이 피었습니다를 외친다.
-
모든 참가자는 1초에 거리1이상 움직일 수 없다고 가정한다. (예를들어 2.4초 동안은 최대 2.4의 거리를 이동할 수 있다. 반면 이동을 원치않으면 0의 거리만큼 움직이므로 0~2.4사이의 거리를 움직일 수 있다)
술래와 참가자에 대한 설정값은 아래와 같다.
술래에 대한 설정값
-
처음에는 술래가 10초간 무궁화 꽃이 피었습니다를 외친다.
-
그 다음에는 술래가 9.5초간 무궁화 꽃이 피었습니다를 외친다.
-
그 다음에도 0.5초씩 구호를 외치는 시간을 줄인다. 이것을 10회 반복한다.
참가자에 대한 설정값
-
처음에는 참가자가 "본인의번호/100"을 계산하여 나온 숫자만큼 움직인다. 즉 10번 참가자는 0.1의 거리를 움직이고 456번 참가자는 4.56의 거리를 움직인다.
-
그 다음은 처음에 본인이 이동했던 거리에 1씩 더하여 움직인다. 즉 10번 참가자는 1.1의 거리를 움직이고 456번 참가자는 5.56의 거리를 움직인다.
-
예시1
300번 참가자의 경우 아래와 같이 이동하므로
1회 | 2회 | 3회 | 4회 | 5회 | 6회 | |
---|---|---|---|---|---|---|
술래의 외침시간 | 10 | 9.5 | 9.0 | 8.5 | 8.0 | 7.5 |
참가자의 이동폭 | 3 | 4 | 5 | 6 | 7 | 7.5 |
참가자의 총 이동거리 | 3 | 7 | 12 | 18 | 25 | 32.5 |
생존할 수 없다. (6회에서 32.5까지 이동후 사망)
-
예시2
350번 참가자의 경우 아래와 같이 이동하므로
1회 | 2회 | 3회 | 4회 | 5회 | 6회 | |
---|---|---|---|---|---|---|
술래의 외침시간 | 10 | 9.5 | 9.0 | 8.5 | 8.0 | 7.5 |
참가자의 이동폭 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 7.5 |
참가자의 총 이동거리 | 3.5 | 8 | 13.5 | 20 | 27.5 | 35 |
생존 할 수 있다. (6회에서 정확하게 7.5초간 이동하고 살아남는다)
-
예시3
400번 참가자의 경우 아래와 같이 이동하므로
1회 | 2회 | 3회 | 4회 | 5회 | 6회 | |
---|---|---|---|---|---|---|
술래의 외침시간 | 10 | 9.5 | 9.0 | 8.5 | 8.0 | 7.5 |
참가자의 이동폭 | 4 | 5 | 6 | 7 | 8 | 5 |
참가자의 총 이동거리 | 4 | 9 | 15 | 22 | 30 | 35 |
생존 할 수 있다. (6회에서 5초간만 이동하면 35만큼 이동하므로 살아남는다)
술래
t = c(seq(10,by=-0.5,length.out=10))
t
참가자
$x= \frac{n}{100}+\frac{n}{100}+1+\frac{n}{100}+2+\dots+\frac{n}{100}+9 $
참가자가 생존하기 위해서는 1) 술래의 외침시간 < 이동폭 2) 10회 동안 이동거리 >= 35
num=350
steps = num/100 + 0:9
steps
t >= steps
sum(steps[t>=steps])
t[t<steps][1]
sum(steps[t>=steps]) + t[t<steps][1] >= 35
t = c(seq(10,by=-0.5,length.out=10))
surv <- c()
num = 67
steps = num/100 + 0:9
x1 <- sum(steps[t>=steps]) + t[t<steps][1] >= 35
num = 218
steps = num/100 + 0:9
x2 <- sum(steps[t>=steps]) + t[t<steps][1] >= 35
num = 456
steps = num/100 + 0:9
x3 <- sum(steps[t>=steps]) + t[t<steps][1] >= 35
surv <- c(x1, x2, x3)
surv
t = c(seq(10,by=-0.5,length.out=10))
surv <- c()
for (num in 1:456){
steps = num/100 + 0:9
surv[num] <- sum(steps[t>=steps]) + t[t<steps][1] >= 35
}
sum(surv)
다음은 인터넷에서 어떠한 자료를 다운받아 매트릭스로 저장하는 코드이다.
df=read.csv("https://raw.githubusercontent.com/guebin/2021IR/master/_notebooks/round2.csv")
mat=as.matrix(df)
매트릭스는 mat
이라는 변수에 저장되어 있다.
df=read.csv("https://raw.githubusercontent.com/guebin/2021IR/master/_notebooks/round2.csv")
mat=as.matrix(df)
plot(mat[,1],mat[,2])
X <- mat[1,]
X
Y = rbind(c(0,-1),c(-1,0))
Y
Y %*% X
f = function(X){
dim(X)=c(2,1)
X
}
rbind(c(0,-1),c(-1,0)) %*% f(mat[1,])
g = function(X){
dim(X)=c(1,2)
X
}
mat2 = mat
dim(mat2)
mat2 = mat*0
for (i in 1:5513) mat2[i,] = rbind(c(0,-1),c(-1,0)) %*% f(mat[i,]) %>% g
plot(mat2[,1],mat2[,2], col='red')