LeeA0의 공부 일기

[Clean Code] 2장 - 실습 본문

Java/Clean Code

[Clean Code] 2장 - 실습

LeeA0 2021. 9. 2. 22:59

2장의 내용을 토대로 적지만 예전에 풀은 알고리즘 코드를 개선 시켜보았습니다.

 

<개선 전>

import java.util.Arrays;

public class Programmers_로또의최고순위와최저순위 {

	public static void main(String[] args) {
		int[] lottos = { 0, 0, 0, 0, 0, 0 };
		int[] win_nums = { 38, 19, 20, 40, 15, 25 };
		System.out.println(Arrays.toString(solution(lottos, win_nums)));
	}
	
	public static int[] solution(int[] lottos, int[] win_nums) {
		int[] rank = { 6, 6, 5, 4, 3, 2, 1 };
		int zero_num = 0;
		int hit_num = 0;
		for (int l : lottos) {
			if (l == 0) {
				zero_num++;
			} else {
				if (contain(win_nums, l)) {
					hit_num++;
				}
			}
		}
		return new int[] { rank[hit_num + zero_num], rank[hit_num] };
	}

	public static boolean contain(int[] win_nums, int l) {
		for (int w : win_nums) {
			if (l == w) {
				return true;
			}
		}
		return false;
	}
}

<개선 후>

import java.util.Arrays;

public class Programmers_로또의최고순위와최저순위 {
	public static void main(String[] args) {
		int[] lottos = { 0, 0, 0, 0, 0, 0 };
		int[] win_nums = { 38, 19, 20, 40, 15, 25 };
		System.out.println(Arrays.toString(solution(lottos, win_nums)));
	}

	public static int[] solution(int[] lottos, int[] win_nums) {
		int[] rank = { 6, 6, 5, 4, 3, 2, 1 };
		int zero_num = 0;
		int hit_num = 0;
		for (int lotto : lottos) { // l->lotto
			if (lotto == 0) {
				zero_num++;
			} else {
				if (isContainWinNums(win_nums, lotto)) { // contain->isContainWinNums
					hit_num++;
				}
			}
		}
		return new int[] { rank[hit_num + zero_num], rank[hit_num] };
	}

	public static boolean isContainWinNums(int[] win_nums, int lotto) {
		for (int win_num : win_nums) { // w->win_num
			if (lotto == win_num) {
				return true;
			}
		}
		return false;
	}
}

'Java > Clean Code' 카테고리의 다른 글

[Clean Code] 4장. 주석  (0) 2021.09.16
[Clean Code] 3장. 함수 (미완)  (0) 2021.09.11
[Clean Code] 2장. 의미 있는 이름  (0) 2021.08.29
[Clean Code] 1장. 깨끗한 코드  (0) 2021.08.22
[Clean Code] 0장. 들어가면서  (0) 2021.08.22
Comments