알고리즘 풀 때 가독성 높이기
변수를 활용하기
아래 두 코드는 동일한 일을 하지만, 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 라이센스를 따릅니다.