포스트

알고리즘 풀 때 가독성 높이기

변수를 활용하기

아래 두 코드는 동일한 일을 하지만, typeNum이라는 변수를 활용하는 경우 코드를 읽기 훨씬 쉽다. 작성하거나 수정할 때도 더 용이하게 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 0; i < 3; i++) {
            s = sc.next().charAt(0);
            t = sc.nextInt();

            if(t >= 37 && s == 'Y')
                typeNum = 1;
            else if(t >= 37)
                typeNum = 2;
            else if(s == 'Y')
                typeNum = 3;
            else
                typeNum = 4;
            countArr[typeNum]++;
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i=0; i<3; i++) {
        char sym = sc.next().charAt(0);
        int tem = sc.nextInt();

        if(sym=='Y' && tem>=37) {
            //A
            situ[0]++;
        } else if(sym=='N' && tem>=37) {
            //B
            situ[1]++;
        } else if(sym=='Y') {
            //C
            situ[2]++;
        } else {
            //D
            situ[3]++;
        }
    }

for 문보다 while 문이 나을 때

for 문이 자주 쓰다보니, 아래와 같은 형태로도 자주 사용하게 됐다.

1
2
for(;;) { if(...) break; }
while(true) { if(...) break; } //동일함

특히 어떤 조건이 나오기 전까지 계속해서 반복하는 상황을 구현하려고 할 때도 for문을 쓰려고 하니 저렇게 사용하게 됐는데, 이런 경우라면 while 문을 쓰는 것이 더 이해하기 쉬운 코드를 만들어낸다.

1
2
3
while(a>1) {
  ...
}

어떤 조건 하에서 계속해서 나누거나, 빼는 코드를 구현하려면 while 문을 쓰자. 조건이 훨씬 가까이 붙어있다. 분기 생각을 안해도 된다. 다만, 매 분기별 증가하거나 감소하는 변수가 필요한 경우는 당연히 for문이 좋다. 그 변수가 어떻게 증가하거나 감소하는지가 루프 선언시 바로 보이기 때문이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.