JAVA 구구단으로 알고리즘 이해하기

#JAVA004 #구구단 #알고리즘의탄생
Dec 14, 2023
JAVA 구구단으로 알고리즘 이해하기
 

🆕 구구단을 만들어 보자

 

# Planning

오늘 선생님께서 스스로 대학교 처음에 복수전공으로 컴공과를 하실 때, 구글링이란 것을 할 수 없었을 시절이 있으셨다고 한다. 하지만 과제로 구구단을 만들어야 했고, 그 구구단을 어떻게든 만들어 보겠다는 집념하에 어떻게든 완성을 했다고 하신다.
 
하지만 거기서 어떻게 알고리즘이 탄생을 할 수 있는지 설명해주시면서 좀 많은 걸 깨닫게 되었다. 오늘 그 과정을 다시 한번 곱씹으면서 여기에 정리해 볼려고 한다. 그래서 구구단을 아예 바닥부터 쌓아가는 과정을 만들어보자.
 
  • 일단 구구단을 어떤 함수도 쓰지 않고 만들어 본다.
  • 그리고 자주 반복되는 부분을 한 단계씩 함수로 수정해본다.
 
 
 

🍐 어떤 함수도 쓰지 않고 원하는 결과 만들어보기

 
 
[001]
[001]
  • 일단 어떤 함수도 사용하지 않고 그냥 노가다로 다 작성하다 보니 4단 이상부터 더 이상은 못하겠다라는 귀차니즘이 솟구친다.
    • (사실 이 귀차니즘을 체감을 해야된다.)
  • 그리고 작업을 하다가 두 가지 아주 효율적인 단축키를 알게되었다.
 
 
💡
꿀팁!! 라인 복제 단축키
  • Ctrl + D 를 사용하게 되면 커서 바로 윗라인을 똑같이 복사할 수 있다. 완전 꿀팁!
 
다중 커서로 다중 수정하기
  • Ctrl 을 두 번 누르고 떼지 않으면 커서를 이동할 때 마다 커서가 여러개가 생긴다. 그리고 한 번에 같이 수정이 가능하다.
 
 
 
[002]
[002]
  • 결과가 일단 나오기는 한다는 걸 알 수 있다.
  • 하지만 이대로는 귀찮기 때문에 바꿀 수 있는 함수를 하나 하나씩 적용해 보도락 하자.
 
 

🍏 첫 번째 함수 적용

 
 
[003]
[003]
  • 코드를 보면 계속 반복되는 부분을 찾을 수 있고, 캡쳐에 보이는 ‘2’ 부분을 함수처리 해도 될 것 같다는 판단이 든다.
  • 이 부분을 x라고 정하고 각 단 마다 이 x를 수정하는 함수를 적용해 볼 수 있다.
 
 
 
[004]
[004]
  • 4번 사진대로 계속 반복되는 부분이었던 2단에서는 2, 3단에서는 3의 경우를 x로 할당하고 각 단이 시작하기 전에 변수를 새로 할당해준다.
  • 여기서 x는 2단부터 9단이 될 것이기 때문에 int형으로 선언을 해주었다.
  • 그리고 변수 부분은 문자열 안에 도출할 수 없기 때문에 ‘ x +’로 문자열과 결합시킬 수 있게 변경 해주었다.
 
 
[005]
[005]
 
 
  • 결과값을 보면 작성 한 곳 까지는 잘 작동이 되는 것을 알 수 있다.
  • 하지만 반복문을 안쓰고 할수 있는 일중에, 우리는 x가 결과값에도 적용될 수 있지 않을까 하는 합리적인 생각을 할 수 있다.
 

🍊 첫 번째 함수 추가 적용

 
 
[006]
[006]
  • 일단 변수 x가 활용될 수 있는 곳은 결과 값 부분이었다.
  • 그래서 각 항 마다 ‘x * 각 라인의 곱’을 전체 수정을 해 주었다.
  • 이렇게 하면 또 일일이 값을 모두 수정해줘야 되었던 전 단계에서 조금 더 효율적이 되었다. 각 단이 시작하기 전에 변수만 바꿔주면 될 것 이기 때문이다.
 
 
 
[007]
[007]
  • 결과 값도 예상대로 잘 나와 주었다.
  • 이제 변수 x로 활용 가능한 모든 사항은 다 적용해았다.
  • 여기서 더 효율적인 일을 하기 위해서는 다른 함수가 필요하다.
 
 
 

🍉 두 번째 함수 적용 : 반복문

 
 
[008]
[008]
  • 현재 콘솔 창에 떠 있는 모습인데, 여기서 합리적인 생각을 할 수 있다.
  • 자동으로 증가하는 기능이 있다면 사용할 수 있지 않을까??
  • 그렇게 for문의 수요가 생기게 되는 것이다.
  • 이제 자동으로 증가하는 1~9까지의 수를 함수를 적용할 것이다.
 
 
 
[009]
[009]
  • 1부터 9까지의 반복할 수 있는 for문을 만들었다.
  • 일단 전체 코드를 지우지 않고 한 라인만 가져오고 테스트 해보기 위해 나머지는 모두 주석처리를 하였다.
 
 
 
[010]
[010]
  • 함수에 적용한 대로 결과 값이 잘 나왔다.
  • 이제 2단의 나머지 부분을 삭제해도 될 것 같다.
  • 하지만 우리는 2단 부터 9단 까지의 구구단을 만드는 과정이므로, 현재처럼 한 단은 완성이 되었지만, 2단에서 9단 까지의 자동 증가 함수가 또 필요하다.
 
 
 

🍍 세 번째 함수 적용 : 중복 for문

 
 
[011]
[011]
  • 이제 우리에게 추가적으로 필요한 기능은 2부터 9까지 자동증가시켜주는 반복문이다.
  • for문을 테스트하기에 앞서서 일단 기존 for문은 주석 처리하고 따로 테스트를 먼저 해본다.
  • 변수 i는 아래 for문에서 사용 중이므로 다른 변수 j로 2단부터 9단을 돌리는 함수를 만들었다.
 
 
 
[012]
[012]
  • 2단9단 함수가 잘 반복이 되고 있다.
  • 이제 남은 것은 아래 완성 했었던 함수를 이 2~9단 함수 안에 그대로 넣어주기만 하면 된다는 것이다.
 
 
 
[013]
[013]
  • 이제 잠시 쓰고 있엇던 변수 x를 삭제하고 자동증가 시켜줄 j변수를 x자리에 모두 교체 해준다.
  • 코드는 거의 완성이 되었고 이제 테스트 단계만 남았다.
 
 
[014]
[014]
 
 
  • 결과가 너무 길어서 다 캡처를 할 수 없었지만 결과는 제대로 나왔다.
 
 

🍑 결과

 
 
[015]
[015]
  • 완성된 코드다. 제일 처음 삽질하면서 만들어도 결과를 만들어 내긴 만들어 내 보았으나, 이렇게 기계적인 부분들을 함수를 사용하면서 효율적으로 불필요한 일들을 줄여 나갈 수 있었다.
  • 바로 이런 부분들이 선생님께서는 알고리즘의 시작이라고 하신다.
  • 뭔지는 정확하게는 잘 모르겠지만, 알고리즘이라는 것은 귀차니즘의 시작이 아닐까? ㅎㅎ;;
  • 결과를 좀 더 가독성 있게 하기 위해서 완성 코드를 조금더 가다듬었다.
 
 
 
[016]
[016]
  • 잘 작동한다. 아무래도 다음 시간에는 좀 더 가독성있게 배열로 정리하는 수업을 하실 것 같다.
 
 
 
💡
코드를 어떻게는 결과값을 만들어내는 자세 역시 개발자로서 필요한 역량이라고 선생님께서는 말씀하셨다. 왜냐하면 누구든지 작업을 완벽하게 했다고 생각할 지라도 항상 뭔가 부족한게 사람이 만든 코드이기 때문이다. 일하는 개발자로서 중요한 역량은 ’요구사항을 적용하고 일정 기간안에 작업을 끝내는 것이다.’ 나머지 2%의 부족한 부분은 유지보수로 채워나가든지 해야지, 스스로가 생각하는 100%를 만들기 위해서 납품기간을 넘기면 실패한 것이나 다름없다.
 
 
 
 
 
 
 
 
Share article
RSSPowered by inblog