2019년 3월 28일 목요일

[R 강의] 369 게임 박수치기

R을 이용해 369게임 규칙에 맞게 박수치도록하는 방법을 알려드리려고 합니다.
R에 익숙해지려면 함수을 많이 써봐야하는데 뭔가 재밌는 주제를 선택하고 싶었고 게임 정답 맞추는 것을 생각하게 되었습니다.

만들기 전 생각을 해봅시다.
1. for 문을 이용해서 1부터 시작해 값을 1씩 증가시키면 되고
2. 증가시킨 숫자들 중 3, 6, 9가 들어가 있는지 확인하고
3. 있다면 '박수'를 치게 만들면 됩니다.


숫자들에서 3, 6, 9가 있는지 확인한다면 제가 주로 쓰는 함수는 strsplit입니다.
strsplit(문자,split="분리하려는 구분자")이므로 strsplit(as.character(숫자),split="")으로 두면 숫자가 문자로 바뀐 뒤 각각 분리 됩니다.

분리되고 나면 list가 되기 때문에 unlist를 해주면 백터가 됩니다.

정리하면
unlist(strsplit(as.character(i),split=""))
정리된 코드를 number_split에 저장하겠습니다.
number_split<-unlist(strsplit(as.character(i),split=""))

이제 number_split에서 3, 6, 9가 있는지 확인을 해야합니다.
저는 number_split가 3인지 6인지 9인지 확인할 것이고 확인한 뒤에는 논리 연산자가 되기 때문에 더하면 3, 6, 9가 있는 갯수가 됩니다.

정리하면
sum(number_split==3 | number_split==6 | number_split==9)
정리된 코드를 have369에 저장하겠습니다.
have369<-sum(number_split==3 | number_split==6 | number_split==9)

마지막으로 if문을 이용해 have369가 0이상이면 박수가 출력되게 하고 아니면 그냥 숫자가 출력되도록 하겠습니다.

이제 for 문을 이용해 숫자를 1씩 증가하게 하면 되는데 출력되는 속도가 너무 빠르므로 for 문 안에 시간을 약간 주려고 합니다. Sys.sleep(0.1)을 하면 0.1초의 간격을 준다는 의미입니다. for문 맨 마지막에 넣겠습니다.

최종 코드는 다음과 같습니다.
# 3,6,9 game
number<-1000

for(i in c(1:number)){

  number_split<-unlist(strsplit(as.character(i),split=""))
  have369<-sum(number_split==3 | number_split==6 | number_split==9)

  if(have369>0){

    print("박수")

  }else{

    print(i)

  }

  Sys.sleep(0.1)

}

0 개의 댓글:

댓글 쓰기