[코드스쿼드 코코아 과정] 미션2 인디언 이름 짓기

Kyu·2020년 11월 4일
0

태어난 년도 부터 해결해보자. 태어난 년도는 4자리이다. 4자리로 들어갈 수 있는 숫자 1000~9999까지 총 9000개의 배열을 만들고, birth의 입력값의 4번째 자릿수에 따라 각기 다른 문자열을 출력할거다. 입력값의 4번째 자릿수가 무엇인지 판별하기 위해 substring 을 활용할 것이다.

public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.println("생년월일을 차례대로 입력해주세요.");
		
		int birth = s.nextInt();
		int month = s.nextInt();
		int day = s.nextInt();
		
		int[] birth_array = new int[9000];
	
		
	}

}

근데 생각해보니까 그냥 말이 안된다. 그래서 정수로 입력했을때 1자리 수의 숫자를 판별하는 방법을 검색해보았다. 10으로 나눈 나머지로 판별하면 된다. 예를 들어서 12345 를 입력했을때 10으로 나눈 나머지는 5이다.

import java.util.Scanner;

public class Indian {

	public static void main(String[] args) {
			Scanner s = new Scanner(System.in);
			System.out.println("생년월일을 차례대로 입력해주세요.");
			
			int year = s.nextInt();
			int month = s.nextInt();
			int day = s.nextInt();
			
			String y, m, d;
			
			if (year%10 == 0) {
				y = "시끄러운";
			}
		
			if (year%10 == 1) {
				y = "푸른";
			}
			
			if (year%10 == 2) {
				y = "어두운";
			}
		//계속 쭉쭉쭉 9까지 만들면 된다
	}
}

그냥 이렇게 한 라인으로 쭈욱 코딩하는 것은, 직감적으로 아니다. 일단 문제 구현시 함수를 적극적으로 사용해라고 했고 이렇게 하는 건 내가 보기에도 좋지 않다.

package mission02;

import java.util.Scanner;

public class Indian {
	
	public static void indianYear(int year) {
		String y;
		
		if (year%10 == 0) {
			y = "시끄러운";
			System.out.println(y);
		}
	
		if (year%10 == 1) {
			y = "푸른";
            System.out.println(y);
		}
		
		if (year%10 == 2) {
			y = "어두운";
            System.out.println(y);
		}
		
		
		}
	}

	public static void main(String[] args) {
		
			Scanner s = new Scanner(System.in);
			System.out.println("생년월일을 차례대로 입력해주세요.");
			
			int year = s.nextInt();
			int month = s.nextInt();
			int day = s.nextInt();
			
			indianYear(year);
			
			

	}
}

팀원의 도움을 받아서 메소드 사용하는 법을 익혔다. 그리고 어떻게 하면 저 if문을 배열로 바꿀 수 있을까 고민하면서 배열에 관한 강의를 다시 한번 들었고, 생각해내는 데는 힘들었지만 아래 코드처럼 정말 기본적인 것으로 해결할 수 있었다.

package mission02;

import java.util.Scanner;

public class Indian {
	
	public static void indianYear(int year) {
	
		String[] y = {"말 많은", "푸른", "어두운", "조용한", 
				"웅크린", "백색", "지혜로운", "용감한",
				"날카로운", "욕심많은"};
	
		int i = year%10;
			System.out.println(y[i]);
		}
	

	public static void main(String[] args) {
		
			Scanner s = new Scanner(System.in);
			System.out.println("생년월일을 차례대로 입력해주세요.");
			
			int year = s.nextInt();
			int month = s.nextInt();
			int day = s.nextInt();
			
			indianYear(year);
			
			

	}
}

처음엔 아무 생각이 나지 않아서 똑같이 if문을 사용하고 그 안에 각 년도 마다 무엇이 나오는지 적어내려가봤다. if (year%10 == 0) {System.out.println(y[0])} 이런식으로 말이다. 그러다보니 중복되는게 눈에 띄었고 중복되는 것을 변수에 담아보았다. if (int i = year%10) {System.out.println(y[0])} 이렇게 말이다. 이쯤에서 살펴보니 답이 나왔다. 변수에 year%10를 담아주고 출력해주기만 하면 끝이었다.

나머지 월, 일에 따라 출력하는 것은 어렵지 않았다. 입력값이 인덱스에 -1만 하면 서로 대응하기 때문이다. 예를 들어 10월을 입력하면 인덱스가 9인 값이 나와야 하기 때문이다. 배열은 0부터 세기 때문이다.

그래서 아래와 같이 년, 월, 일 모두 완성했다.

package mission02;

import java.util.Scanner;

public class Indian {
	
	public static void indianYear(int year) {
	
		String[] y = {"말 많은", "푸른", "어두운", "조용한", 
				"웅크린", "백색", "지혜로운", "용감한",
				"날카로운", "욕심많은"};
	
		int i = year%10;
			System.out.println(y[i]);
		}
	
	public static void indianMonth(int month) {
		String[] m = {"늑대", "태양", "양", "매", "황소", "불꽃", "나무", 
				"달빛", "말", "돼지", "하늘", "바람"};
		
	
		System.out.println(m[month - 1]);
		
		}
	
	public static void indianDay(int day) {
		String[] d = {"와(과) 함께 춤을", "의 기상", "은(는) 그림자 속에",
				"의 화신", "의 노예", "의 마법사", "의 환생", "의 죽음",
				"아래에서", "를(을) 보라", "이(가) 노래하다", "의 그림자",
				"의 일격", "에게 쫓기는 남자", "의 행진", "의 왕", "의 유령",
				"을 죽인자", "는(은) 맨날 잠잔다", "처럼", "의 고향", "의 전사",
				"은(는) 나의 친구", "의 노래", "의 정령", "의 파수꾼", "의 악마",
				"와(과) 같은 사나이", "를(을) 쓰러뜨린 자", "의 혼", "은(는) 말이 없다"};
		
		System.out.println(d[day - 1]);
		
		}
	
	

	public static void main(String[] args) {
		
			Scanner s = new Scanner(System.in);
			System.out.println("생년월일을 차례대로 입력해주세요.");
			
			int year = s.nextInt();
			int month = s.nextInt();
			int day = s.nextInt();
			
			indianYear(year); indianMonth(month); indianDay(day));
			
			

	}
}

이제 마지막으로 남은 문제는 출력되었을 때 모두 한 줄에 한 단어처럼 나타나는 게 아니라 년, 일 , 월 각각 한줄에 적혀 나온다. 세 개를 +해서 프린트 해보려했지만 다음과 같은 에러가 났다.

내 생각에는 지금 내가 사용하고 있는 메소드의 특징을 잘 이해하지 못해서 어떻게 해야할지 모르는 것 같다. 다시 생활코딩으로 돌아가 복습한 후에 다시 살펴보아야겠다.

어쨋든, 처음에 미션을 보았을때 지레짐작으로 오늘 안에 끝내지 못할 거라고 생각했는데 팀원들과 집중해서 공부하다보니 결과가 빨리 도출 된거 같다. 스스로 메소드로 전환하는 방법은 터득하지 못했지만 다른 몇몇 부분에서 스스로 해결한 부분이 있기 때문에 뿌듯한 마음으로 하루를 마무리 한다.

profile
TIL 남기는 공간입니다

0개의 댓글