greenhelix
greenhelix
greenhelix
07-07 10:19
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#05_Code Signal Arcade >> Shape Area
Algorithm/Java

#05_Code Signal Arcade >> Shape Area

2019. 9. 29. 19:44

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!

ShapeArea ?

그림과같이 다각형 구역의 수를 자동으로 계산해주는 알고리즘이다. 
입력값은 n 으로 숫자형이고, 그림에서 처럼 n이 커질수록 다각형의 갯수를 자동으로 반환되게 하는 것이다. 

처음에는 문제를 봤을때 어렵게 생각했다. 
n = 1 이니깐, 다각형 갯수도 1개 . 
n = 2 일 때, 다각형 갯수 5개 . 
n = 3 일 때, 다각형 갯수 13개 .
n = 4 일 때, 다각형 갯수 25개 . 
....
이런식으로 되길래 그림으로만 보고, 배열을 써서 해야하나 싶었다. 

n = 1 >>> [ 1 ]  
n = 2 >>> [ 1, 3, 1 ] 
n = 3 >>> [ 1, 3, 5, 3, 1 ]
n = 4 >>> [ 1, 3, 5, 7, 5, 3, 1 ]

이런식으로 회문(palidrome)느낌이 들길래 숫자 배열을 만들어서 이 배열들을 
다 더해주면 되지 않을까 생각했다. 
그런데, 그것을 코드로 소화하는것이 힘들었다. 

그래서 다른 방식을 생각해 보았다. n 이 증가했을 때, 나오는 결과 값들과의 관계를 코드로 해서 공식처럼 만드는게 좋을 것 같았다. 왜냐하면 도저히 n 이 증가했을 때, 배열로 하여 가운데 숫자가 +2 씩 되는 것을 보고 
힌트를 얻었다. 
규칙성이 있구나 

그리고 기본적으로 코드를 쉽게 만드는 것에 중요하고 답안에도 그런식으로 많이 나오기 때문에 
생각을 바꿔서 보았다. 

n = 1 >>> [ 1 ]  >>> 1        
n = 2 >>> [ 1, 3, 1 ]  >>> 5
n = 3 >>> [ 1, 3, 5, 3, 1 ] >>> 13
n = 4 >>> [ 1, 3, 5, 7, 5, 3, 1 ] >>> 25 
배열을 빼고 다각형 갯수의 합에 집중을 했다. 
+4 +8 +12 이런식으로 점차 갯수가 늘어가는 것을 확인이 되니 공식을 만들면 되겠다 싶었다. 

n 1 2 3 4
sum(다각형 갯수) 1 5 13 25

여기에서 n 은 1씩 늘어나고 sum 은 4의 배수가 더해진다는 것을 알게 되었다. 

n 1 2 3 4
sum  1 5 13 25
4의 배수                +4                              +8                                +12

자 이걸 코드로 작성하면, 
기본적으로 n =1 일때, sum =1 이니깐 sum =1 이라고 선언해준다. 
거기에 기존의 sum 에다 4의배수를 하나씩 더해주면된다!!! 유레카... ㅋㅋ 

sum = sum + 4 의 배수 

즉 이런식의 공식을 for 반복문에 반영만 해주면 된다! 

int shapeArea(int n) {
      int sum = 1 ; 
      
      for ( int i =1; i<n; i++) {
      		sum += 4 * i ; 
      }
      
      return sum; 

}

 

https://github.com/greenhelix/CodeFights-Arcade/tree/master/Intro/Edge%20of%20the%20Ocean/shapeArea

 

greenhelix/CodeFights-Arcade

Efficient Solutions to 100+ problems in CodeFights Arcade written in c++, python, java , c#, JavaScript - greenhelix/CodeFights-Arcade

github.com

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#06_Code Signal Arcade >> Make Array Consecutive 2  (0) 2019.09.29
#04_Code Signal Arcade >> Adjacent Elements Product  (0) 2019.09.29
#03_Code Signal Arcade >> Check Palindrome  (0) 2019.09.29
    'Algorithm/Java' 카테고리의 다른 글
    • #07_Code Signal Arcade >> Almost Increasing Sequence
    • #06_Code Signal Arcade >> Make Array Consecutive 2
    • #04_Code Signal Arcade >> Adjacent Elements Product
    • #03_Code Signal Arcade >> Check Palindrome
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바