Dev: 개발/Algorithm

한 쌍의 수를 이동 없이 바꾸는 함수를 작성하라. (임시변수는 사용할 수 없다.)

KR_Goodnews 2016. 9. 11. 13:25


키 포인트는 ‘두 수의 차이’이다.

0 < b < a 일 경우, 시각적으로 표현하면 다음과 같다.


a-b를 diff라고 생각하면 알고리즘은 다음과 같다.


ㄱ. a = diff

ㄴ. b = b + diff // 이 시점에서 b는 a의 원래값이 된다.

ㄷ. a = b - diff // a는 b의 원래값이 된다.


알고나면 참 쉬운 문제이다. 이를 Swift 코드로 표현하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
func swap(var a: Intvar b: Int-> (IntInt){
    a = a - b
    b = a + b
    a = b - a
    
    print("a: \(a)")
    print("b: \(b)")
    
    return (a,b)
}
cs

실행 결과는 다음과 같다. 양수는 물론 음수에도 적용되고, 파라미터의 자료형을 바꿔준다면 소수에도 잘 적용된다.