본문 바로가기

기술 블로그 (Tech Blog)/Project-algorithmTool

알고리즘 문제풀이 project 구상

어떻게하면 코딩테스트 문제를 풀때, 간단한 환경에서, 코딩테스트에만 집중할 수있는 Tool를 만들지?

 

어떻게 하면 Solution 클래스를 한번만 만들 수 있을까?

어떻게 하면 반복되는 코드를 줄일 수 있을까?

어떻게 하면 이미 풀어버린 클래스들을 메모리에 띄우지 않을까?

(왜냐면 풀어버린 문제들은 이미 코드가 누적되어있기 때문에, method 구간에 올라갈 것이다)

 

알고리즘 문제를 풀 때

매번 똑같은 함수를 복붙해서 날짜별로 구현을 했는데,

생각해보니, 중복을 줄이면 좋지 않을까? 라는 생각이 러닝머신 위에서 들었다.

 

구 알고리즘 브랜치

https://github.com/dev-wonny/algorism

 

문제점

- 같은 코드를 반복

- 문제를 풀 때마다, 환경을 세팅해야해서 시간을 뺏김

- 이상한 패키지 구조(푼 날짜 별로 정리함)

 

 

공통점

1) Solution class 내부의 public 함수 내용을 채우면 된다.

(1) 프로그래머스

 

(2) leetcode

 

예상 해결 함수

둘다 default class 내부에 이런 식으로 해주면 되지 않을까?

public T solution(P p, R r...) {
   return t;
}

 

 

 

*코드 반복 줄이기* 과도기

(1) 함수 자체를 기본으로 만들고 복붙

처음에는 A_Default.java의 main과 Solution class 복사해서 새로운 파일에 복붙을 하여 사용했다.

장점:

- 반복 코드를 치지 않아서 편해졌다

단점:

- 복사 붙여넣기 하면, 새로운 파일에 A_Default로 tagging 되어 따라온다..

- 커서를 처음에 두고 복사하고자 하는 위치까지 내가 마우스로 직접 작업하는 수고로움

 

 

(2) markdown으로 복사 붙여넣기

마우스로 범위를 지정해서 복붙하는 것을 줄이자! 그래서 md를 사용했다.

 

 

(3) 이중 배열 print 모듈

DFS, BFS 문제를 공략하다보니 이중배열의 값을 확인하고싶을 때가 있었다.

예전에 table을 console에 그려주는 뭔가가 있어서 사용했던거같은데(기억이 나지않는다) 그래서 static 함수로 만들어서 사용해버렸다.

이중 배열 테이블 형식으로 보여주는 함수

 

 

(4) tool을 만들어보자

알고리즘 문제를 푸는 것이 목적이었기에, 별 신경을 쓰지 않았지만,

알고리즘 문제 풀이 환경 tool을 만들어보면 내가 공부하고 있는 것들을 잘 활용할 수 있을거란 생각이 들었다.

 

자바 관점:

- java의 강점인 oop를 적극 활용

- 제네릭 사용: 전달되는 매개변수를 Object로 전달해서

- 내가 짠 코드가 static이여야 하는걸까?

- 라이브러리/모듈화: 값을 출력해주는 것은 간단하니 static class로 미리 만들어주면 좋지 않을까? 

 

cs 관점:

- 메모리 최적화: jvm이 돌때 메모리를 사용하는데, 문제를 풀면 풀 수록 메모리를 많이 사용하는건 아닐까?