콘텐츠로 건너뛰기

개미수열 만들기

얼마전 친구 형민이가 회사에서 그날따라 일이 없어서 하염없이 빈둥대고(?)있었다. 그러던 중 메신저를 통해서 친구 한 명이 심심하면 ‘개미수열’을 만드는 프로그램을 짜 보라고 권했다. 그래서 간단한 프로그램을 만들기 시작하면서 재미있으니까 너도 짜 보라면서 숙제아닌 숙제를 내게도 내 주었다. 이런 종류의 퀴즈를 좋아하는 관계로 나도 순식간에 개미의 세계로 뛰어들었다. 다 완성하면 서로의 코드를 비교해 보자는 약속과 함께….

처음엔 배열을 사용해 만드는 방법을 머릿속에 떠올렸다. 하지만 배열은 처음 만들어놓은 배열의 숫자보다 더 많은 숫자를 뽑아내야 할 경우엔 문제가 발생함으로 벡터를 떠올렸다. 그리곤 종이에다 개미수열을 뽑아낼 수 있을만한 순서도를 끄적거리기 시작했다. 내 순서도를 머릿속에서 몇 번이고 디버깅해서 완벽하다는 판단을 내렸다. 자바코드로 옮기기 시작하고 얼마 후, ‘앗뿔사!! 벡터안에는 객체타입만 집어넣을 수 있잖아’라는 생각을 하기에 이르렀다.

복잡하게 하고싶지 않아 다른 방법을 고심하던 끝에 결국 String으로 개미수열을 뽑아내는 코드를 완성할 수 있었다. 개미잡는일에 재미를 붙여서 클래스에 생성자도 만들어 넣고, 겟터하고 셋터메소드도 첨가해서 개미수열을 뽑아내는 독립적인 클래스를 완성하기에 이르렀다. 예외처리부분도 추가해서 예외가 발생했을때 경고메세지를 출력해주는 부분도 만들었다. 순식간에 짧막했던 코드가 두 배 가까이 늘어나버렸다. 탄력이 붙기 시작하면서 효율성도 고려하기 시작했다. 결국 String으로 완성했던 코드를 StringBuffer를 이용하는 코드로 싸그리 갈아엎었다. 그 날은 그냥 개미와 함께 살았다.

이런 재미있는 문제를 형민이와 나만 알고있을 필요는 없지 않는가. 요섭이에게 연락을 해서 요섭이에게도 문제를 전해주었다. 역시 다 완성하면 서로의 코드를 비교해 보자는 약속과 함께…. 요섭이도 개미잡는일에 뛰어들었고 그도 개미를 잡아내는 코드를 완성했다.

서로의 코드를 비교해 봤는데 다들 문제를 해결하는 방법이 각각 달랐고 다양했다. 그러나 세 명의 공통점이 하나 있었다면.. 모두 String을 이용 했다는것.ㅎㅎㅎ

형민이는 프로그래머로 일을 하고 있는 관계로 매일 코드를 만지면서 살아서 그런지 코드 자체가 깔끔하고 간단명료 했으며 군더더기가 없었다. 요섭이는 조금 독특한 방법을 썼는데 내가 처음보는 클래스 활용법이 있어서 새로운걸 내가 조금 배웠다. 그리고 나는…. 처음에 개미수열을 잘못 이해해서 좀 엉뚱한 프로그램을 만들다 수정한 코드라서 군더더기가 심하게 많다. 예를 들면 문자형태 하나로 끝낼 수 있는 것들을 괜히 숫자로 바꾸고 또 문자로 변환하고 이런 부분이…ㅎㅎ

형민, 요섭, 나 이렇게 세 명은.. 하루종일 개미집에서 헤어나오질 못했다. 세 녀석 모두 쓸데없는데 이렇게 집중을 한다…;;;;


개미들
개미들

혹시 개미수열을 만드는 쓸데없는 일에 관심이 있을 분들을 위해서 개미수열을 간단하게 설명합니다.

1
11
12
1121
122111
112213

이런 방식으로 증가하는 수열인데, 원리는 이렇습니다.

바로 윗 줄의 숫자의 상태를 다음 줄에서는 기록하는 것입니다. 1로 시작했을 경우엔 1이 1개이니까 다음 줄은 11, 11에선 1이 2개 이니까 12, 12에선 1이 1개 2가 1개이니 1121…

이런 방식으로 증가하는 수열을 출 력하는게 문제였답니다^^ㅋ


2 개의 댓글

  1. Vector라면 1.4기준으로… Integer객체를 이용하면 되지 않을까요?
    1.5이상이면 Vector로 하면 되겠고요 ㅎㅎ
    그리고 저는 ArrayList를 이용해서 만들어봤는데 꽤 재미있네요^^

    1. 잉!! 화현님이 ArrayList로 만들었다는 지금 댓글을 보고 저 탄력받았습니다.ㅋ 저는 Vector하고 ArrayList 두 가지 방법을 모두 연구해 봐야겠습니다.

      둘 다 익숙하게 써 본적은 없지만 익숙해질 겸 한번 연구 해 봐야 겠습니다^^ㅋ 화현님 멋진데요!!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다