9월 27일 (월)

프로그래머스 알고리즘 스터디

Posted by Yan on September 27, 2021

코딩테스트와 실무 역량 모두잡는 알고리즘 스터디(JAVA)

이번주부터 임팩트 커리어의 지원사업에 선정되어 프로그래머스의 알고리즘 스터디에 참여하게 되었다!
그동안 얼렁뚱땅으로 쓴 코드를 왜 그렇게 쓰면 안 되는지, 어떻게 하면 더 효율적인 코드를 쓸 수 있을지 리뷰를 받을 수 있다.

PR 남기고 코드리뷰 받기

어떻게 풀었는지, 어떤 부분을 리뷰해주면 좋겠는지, 궁금한 점을 내가 쓴 코드와 함께 PR을 보내면 리더 곰튀김님이 리뷰를 해주신다고 한다.

오늘 한 풀이

이번주는 완전탐색, 정렬, 문자열, 시뮬레이션 문제를 푼다.
일단 나는 파샤드 수 문제를 풀 때, int를 String으로 변환하지 않아야 메모리를 적게 쓰지 않을까?하는 고민에
반복문으로 int의 각 자리수를 구하고, 각 자리수의 합계를 구하는 방식을 택했다.

1
2
3
4
5
int sum = 0;
while (x > 0) {
    sum += x % 10;
    x /= 10;
}

(이런 스타일)

이런 방식은 메모리를 적게 사용한다는 데에 장점이 있다.

반면 수업에서는 오히려 String으로 변환하는 방식부터 보여주셨다.

1
2
3
4
String.valueOf(x)
    .chars()
    .map(Character::getNumericValue)
    .sum()

String으로 변환 -> 각 자리를 Char로 가져옴 -> 각 Char를 map으로 순회하면서 map(Character::getNumericValue) -> sum으로 최종처리

이렇게 하면 한 줄로 코드를 줄일 수 있고, stream을 사용해서 간편하다.
만일 메모리가 많은 엔터프라이즈 환경에서 사용할 것이라면, 가독성이 더 좋은 아래 코드가 낫다고 할 수 있다.

고로 절대적인 이유로 어느 코드가 더 낫다고 말하지는 못한다고 한다.

오늘의 소감

최근에서야 stream이 눈에 익어가는 나는 stream에 대해 더 자세히 알고 싶다는 의지가 생겼다.
코드를 바로 쓰는 과정을 보는 것도 흥미로웠다.
그리고 효율성의 관점이 상황에 따라 다르다는 것 또한 배웠다.
가능한 많은 풀이를 써서 코드 리뷰를 많이 받아야겠다!