Code Signal -Arcade
코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.
주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...
되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!
Avoid Obstacles
장애물 피하기
문제를 보면, 주어진 숫자배열을 봤을 때, 이 수들은 장애물의 좌표가 된다.
이동은 양수방향으로 할수 있으며, 해당 장애물들의 사이로만 점프가 가능하다.
그 점프거리의 최소값을 반환하라는 문제입니당.
저는 결론적으로 못풀었는데, 답안을 보겠습니당..ㅜㅜ
int avoidObstacles(int[] put) {
for(int i = 2;;i++){
boolean t = true;
for(int n:put)
t = t && n%i != 0;
if(t) return i;
}
}
굉장히 간단하더군요..
이 코드를 이해하기 전에 일단 boolean logic 을 다시 좀 찾아보게 되더군요.. 쿰척하게...ㅜㅠㅠ
http://www.danfletcherblog.ca/2015/09/and-java-operators-explained/
일단 좀 이해가 됬나요?
t = t && n%i != 0;
이코드의 핵심은 바로 이부분이죠?
이말이 무엇이냐 하면, 주어진 숫자배열에서 모든값에 i 의 값으로 나눠 보는 겁니다.
그리고 그 나머지가 0이 아닌 다른값이 다 나오는가? 이것을 보는 건데요.
즉,
[5, 3, 6, 7, 9] 이 있다고 칠때, |
그리고 i 의값은 최소 2부터 시작합니다. 1은 모든 수에 다 나눠지니깐 제외하는거죠.
간단히 하면 나머지 값이 0이 절대 나오면 안되는겁니다.
그 값이 바로 해당 수가 아닌이상 배열들 값들의 사이에 최소값이 되는 원리인것이죠.
이해가 되시나요... 저도 한참을 멍하니...멍청해서 ㅠㅠ
아무튼 이렇게 하면, 나눠떨어지지 않는 값이 존재하게 되는 i값을 나오게 되고, if절을 통해서 그 i 값을 리턴해줍니다.
단 조건은 if(t) t가 true를 나타낼 때 인것입니다. ㅎㅎ
끝...
다음은 정답자들의 코드를 올려두겠습니다. 저도 나중에 참고용으로 ㅋㅋ
JAVA
int avoidObstacles(int[] inputArray) {
int jump = 1;
boolean fail = true;
while(fail) {
jump++;
fail = false;
for(int i=0; i<inputArray.length; i++)
if(inputArray[i]%jump==0) {
fail = true;
break;
}
}
return jump;
}
JS
function avoidObstacles(arr) {
for(var n=1;;n++) if(arr.every(x=>x%n)) return n
}
PYTHON3
def avoidObstacles(inputArray):
c = 2
while True:
if sorted([i%c for i in inputArray])[0]>0:
return c
c += 1
'Algorithm > Java' 카테고리의 다른 글
#23_Code Signal Arcade >> Box Blur (0) | 2019.11.26 |
---|---|
#21_Code Signal Arcade >> Is IPv4 Address (0) | 2019.11.23 |
#20_Code Signal Arcade >> Array Maximal Adjacent Difference (0) | 2019.11.22 |