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
'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 |