Me

스택 두 개

minigb 2022. 3. 17. 18:31

지금 나는 얼린 얼음을 보관하는 데 원기둥 모양의 통 두 개를 쓰고 있다.

얼음이 큰 데 비해 통 입구가 좁아서 얼음은 Last In First Out으로 출입한다.

그래서 이걸 사용하면 나중에 넣은 얼음들을 먼저 사용하다가, 얼음이 새로 얼면 그걸 또 넣고, 그러다가 또 최근에 얼린 것들을 사용하고, 이게 반복돼서 오래된 얼음은 계속 사용하지 않게 되는 문제가 생긴다.

그래서 보관하는 통을 두 개 두고, 하나는 새로 얼려진 얼음들을 채우는 용도, 다른 하나는 이전에 얼려둔 얼음을 사용하는 용도로 쓰고 있다. 그리고 그 통에 있는 얼음을 다 쓰고 나면 그건 반대로 얼음을 채우는 통이 되고, 이전에 얼음을 보관하던 통은 이제 얼음을 사용하는 통이 되고.

냉동실이 조금 복잡해서 통을 하나만 둘까 생각했는데,

내가 이렇게 하게 된 게 '오래된 얼음은 계속 사용하지 않게 되는 문제' 때문이라는 걸 깨달았고,

그 이유가 이 통이 Last In First Out 구조이기 때문이라는 걸 깨달았고,

근데 나는 First In First Out을 원했다는 걸 깨달았고,

결과적으로 스택 두 개를 이용해서 한 스택의 구멍은 In용, 다른 스택의 구멍은 Out 용으로 쓰고 있다는 걸 깨달았다.

그렇게 나름의 First In First Out을 구현한 것이었다.

얼음 각각을 보면 pop 될 때 순서가 바뀌긴 하지만, 그것보다도 큰 집단에서 전반적으로 보면 First In First Out이다.

그러므로

얼음 통이 한 개면 문제가 생기고,

세 개 이상일 필요는 없다.

얼음이 드나드는 출입구는 두 개만 있으면 되니까!

크으...

이렇게 무언가를 문득 깨닫는 순간에는 정말이지

소름 끼치도록 황홀한 느낌이다.