한 번에 하나씩 작동 코드와 손상된 코드를 살펴 보겠습니다.
우리가 지금
idx = 0, idx2 = 0
을 시작할 때의 우리가 처음에
nums = [1, 2, -1, 3]
Supposably 작업 코드
1 def two_sum(nums)
2 idx = 0
3 idx2 = 0
4
5 while idx < nums.length-1
6 idx2 = idx+1
7 while idx2 < nums.length
8 pair = nums[idx] + nums[idx2]
9 if pair == 0
10 return [idx, idx2]
11 else
12 idx2 += 1
13 end
14 end
15 idx += 1
16 end
17 end
을 가정 해 봅시다 루프 (6 호선)
idx = 0, idx2 = 1
동안
루프 (8 호선)
idx = 0, idx2 = 1, pair = nums[0] + nums[1] = 3
pair != 0
, 그래서 우리는 else
문에 지금있는 동안 2. (라인 12) 우리 이제 루프 다시 2 차에 루프 (다시 라인 8)
idx = 0, idx2 = 2, pair = nums[0] + nums[2] = 0
pair == 0
, 그래서 우리는 [0, 2]
를 반환 (라인 10)
이 방법 동안
idx = 0, idx2 = 2, pair is still 3
코드가 실행되고 있다고 가정합니다.
깨진 코드 우리는 다시 같은 논리를 통해 실행됩니다
1 def two_sum(nums)
2 idx = 0
3 idx2 = 0
4 pair = nums[idx] + nums[idx2]
5 while idx < nums.length-1
6 idx2 = idx+1
7 while idx2 < nums.length
8
9 if pair == 0
10 return [idx, idx2]
11 else
12 idx2 += 1
13 end
14 end
15 idx += 1
16 end
17 end
.
루프 (2 라인 - 4) 동안 우리는 첫 번째 공격하기 전에 우리가 처음에
idx = 0, idx2 = 0, pair = nums[0] + nums[0] = 2
이제 while 루프 (6 호선) 초에 지금
idx = 0, idx2 = 1, pair = 2
그리고 루프 동안 , pair != 0
는, 그래서 우리는 일에 이제 루프 다시 else
문 (라인 12)
idx = 0, idx2 = 2, pair = 2
충돌 두 번째 while 루프의 예술. pair != 2
이므로 else
문을 쳤습니다.
idx = 0, idx2 = 3, pair = 2
pair != 0
는, 그래서 우리는
else
문을했다.
idx = 0, idx2 = 4, pair = 2
은 그래서 지금, idx2 < nums.length
는 false, so we exit the second while loop, and now
IDX = 1`, 우리는주기를 계속합니다. 당신이 while 루프의 pair
외부를 선언하기 때문에 당신이 if
문에 충돌하지 않도록 pair
결코 동일 제로 물론하지 않는 한, 당신은 0
에를 얻을 수 있기 때문에
당신이 볼 수 있듯이, 그것은 결코, 서로 다른 값을 다시 계산하지 초기 합계.
while
루프는 필요한 루프 수를 잘 모르는 경우를위한 것입니다. 예를 들어, 사용자 항목을 확인하는 경우, 사용자가 항목을 올바르게 가져 오는 시점에 따라 루프를 한 번 또는 10 번 반복해야 할 수도 있습니다. 이 경우 정확히 몇 번 실행해야하는지 알 수 있습니다. 그래서 반복자가 여기있는 일에 더 좋습니다.
작성 방법에 대한 예는 다음과 같습니다. 이렇게하는 것이 더 좋은 방법 일 수 있음을 명심하십시오. 예를 보여 드리겠습니다.
def two_sum(nums)
nums.each_with_index do |num1, idx1|
nums.each_with_index do |num2, idx2|
next if idx1 == idx2
return [idx1, idx2] if num1 + num2 == 0
end
end
end
'직장'이란 무엇입니까? 예상되는 입력/출력 값은 무엇입니까? – fylooi
은 들여 쓰기를 수정하기 위해 코드를 편집했습니다. 두 번째 예제에서'pair' 변수는'while'을 반복 할 때마다 같은 값을 갖습니다. 처음에는 'idx2'가 증가 할 수 있기 때문에 바뀔 수 있습니다. 좋은 사용자 이름 btw :) –