백엔드/JAVA_코딩테스트

JAVA_코딩테스트 준비_ 알고리즘, 의사코드

반 불혹 2022. 11. 28. 22:49

1. 알고리즘?

우리가 특정 목적을 갖는 코드를 작성 할때, 사실 내가 짠 코드만 정답인 것이 아니다.

뭐든지 서울로만 닿으면 그만인데, 이게 방식에 따라 더 빨리가느냐, 늦게 가느냐 차이가 있는 것이다.

적절한 예시, 운송수단에 따라 다른 비용, 속도 등

그런데, 기왕이면 좀 빨리 서울 가고, 비용도 적게드는 방법이 좋지 않을까?

그래서 알고리즘 공부가 필요하다. 

실제로 서버에서 데이터를 다룰 때 굉장히 많은 데이터를 다루므로 최대한 많은 것을 빠르게 처리하는것이 궁극적인 목표이기 때문에 단순 구현 뿐 아니라 "어떻게" 데이터를 다루어야 하는지 정해야 한다. 

쉽게 말하면 알고리즘은 "데이터를 다루는 방식"이라고 보면된다.

다행히, 선배 개발자들은 어떤방식으로 어떤식으로 적용해야 하는지 개념들을 잘 정리 해 놓았다. 우리는 그것에 맞게 공부해서, 적절히 사용하면 된다.

 

2. 의사코드 

우리(내가)가 코드를 짤때, 일단 뭘 어떤식으로 구성해야 하는지 생각을 하고 코드를 짜게된다. 

그런데, 이게 코드를 짜다보면 아까 썻던 변수를 또 가져오고 또 쓰고 데이터를 이캐캐 아주 들들볶는데, 이게 자꾸 헷갈리니까 주석으로 메모해놓곤 한다.

이제는 알고리즘이나 구현 등의 코드 길이가 길거나 고려해야 할 사항이 많아지기 때문에 의사코드는 반 이상, 아니 거의 필수다. 

의사코드는 양식이 없다, 하지만 적어도 자기 자신만큼은 제대로 알 수 있게 "뼈대"를 만드는 작업이라고 생각하고 꼭 코드를 작성하기 전에 의사코드로 대략적인 개념은 잡고 코딩하자. 

만약, 1~10까지 더하는 코드를 쓴다고 하면 나라면 이렇게 주석으로 쓰고 시작한다. 

// 1~10까지 담은 int형 배열 만듦

//담는 값 저장하는 변수 sum을 만듦

// for문으로 10번 돌리는 세팅 만듦

// for문 돌면서 배열에 저장된 수를 sum에 하나하나 더함 

// for문 10번 다 돌면 sum을 출력

간단히 어떤 변수를 만들고, 뭘 저장할 지, 어떤 문법 구문으로 구현 하고 몇번 반복하면 좋을지 써놓는게 빈 공간에 코드를 쓸때 적어도 막연한 느낌은 없애 줄 수 있다. 

"굳이 이런거를 블로그 글로 손아프게 썻냐" 할 수 있는데.

안쓸때는 몰랏는데, 먼저 의사코드를 쓰고 코드 작성을 시작하면 적어도 시작하는게 어렵지 않다. 

빈 공간에, 껌뻑이는 커서 하나만 있는 상태에서 원하는 기능을 뚝딱 만드는게, 아무것도 없는곳에서 바로 "시작"하는게 제일 어려운 것 같다.

이제 알고리즘도 배우고, 구현도 하면 코드를 줄줄줄 써야 한다. 의사코드 쓰자