JAVA

[JAVA] 튜터링 9일차!(2021-08-02)

HJ39 2021. 8. 3. 23:15

개강이 한 달도 안 남은 날이 왔다...ㅜㅜ

튜터링 9일 차에는 지난 시간에 내주었던 과제들을 멘토분이 꼼꼼하게 분석하고 질문하는 형식으로 진행되었다.

내가 자주 쓰는 클래스, 메서드 들의 알지 못하는 부분까지 질문을 해서 많이 당황했고 모르는 부분을 알게 되어서 좋은 시간이었다.

문제 1

문제 2

문제 3

문제 4

 

 


 

 

  • 문제 1

입력받은 이진법 숫자 2개의 해밍 거리를 구하는 프로그램

 

입력

4
0
1
000
000
1111111100000000
1111111100000000
101
000

 

출력

Hamming distance is 1.
Hamming distance is 0.
Hamming distance is 16.
Hamming distance is 2.

 

제출

import java.util.Scanner;

public class Hamming_dis {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int test = sc.nextInt();
		int[] Num = new int[test]; // test개수

		for (int i = 0; i < test; i++) { // 개수만큼 반복
			String a = sc.next();
			String b = sc.next();
			int count = 0; // 문자가 서로다른경우 증가

			for (int j = 0; j < a.length(); j++) { // a,b 문자열 하나씩 비교
				char A = a.charAt(j);
				char B = b.charAt(j);
				if (A != B) // 다른경우 count증가
					count++;
			}
			Num[i] = count; // 해밍 거리를 각 케이스별로 배열에 저장
		}

		// 출력
		for (int i = 0; i < test; i++)
			System.out.println("Hamming distance is " + Num[i] + ".");
		sc.close();
	}
}

 

멘토의 조언

출력 값들을 배열로 만들어 한 번에 출력할 필요가 없고 각각 입력 예시 별로 출력해도 상관없다고 말했다.

 

 


 

 

  • 문제 2

서로 대칭이 되는 수가 입력되었을 때 yes를 출력 아닌 경우 no를 출력한다. (0 입력 시 종료)

 

입력

121
1231
12421
0

 

출력

yes
no
yes

 

제출

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Palindrome_Num {

	public static void main(String[] args) throws IOException {		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		while (true) {
			String Num = br.readLine();		//수 입력
			
			if(Num.equals("0"))		//0을 입력한 경우 종료
				break;
			
			char[] Num_str = new char[Num.length()];	

			
//			for (int i = 0; i < Num.length(); i++)	//입력받은Num을 char배열으로 저장
//				Num_str[i] = Num.charAt(i);
			Num_str = Num.toCharArray();
			
			
			boolean check= true;	// 다른종류가 있는지 확인하는 필드			
			int j = Num.length() - 1;	
			
			for (int i = 0; i < Num.length(); i++) {	//i와j가 서로 반대에서 시작하여 비교
				if (Num_str[i] != Num_str[j]) {		//수가 서로 다른경우					
					check = false;
					break;
				}
				j--;
			}
			
			if (check) { // 수가 다른종류가 1개 이상인 경우
				bw.write("yes\n");
				bw.flush();
			} else { // 패릴드론수인경우
				bw.write("no\n");
				bw.flush();
			}
		}
	}
}

멘토의 조언

우리가 키보드를 통해서 입력한 것을 Stream이라는 곳에서 받고 이것을 바로 출력해도 되지만 바로 출력하는 경우

만약 1번이 아닌 수십억 번을 출력하게 된다면 속도가 매우 느려지게 돼서 buffer라는 공간에 저장시킨 후 

나중에 한 번에 flush라는 메서드를 통해서 출력하면 속도가 매우 빨라지게 된다고 말했다. 

 

 


 

 

  • 문제 3

입력받은 문자열을 한 글자씩 회전시켜 다시 원래 문자열이 출력되게 하는 프로그램

입력

I love you

 

출력

 

문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.
I love you
 love youI
love youI 
ove youI l
ve youI lo
e youI lov
 youI love
youI love 
ouI love y
uI love yo
I love you

 

제출

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Love_Circulation {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		System.out.println("문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.");
		String Str = br.readLine();
		StringBuffer sb = new StringBuffer(Str);

		do {			
			System.out.println(sb);
			
			char a = sb.charAt(0); // sb의 첫글자를 저장
			sb.delete(0, 1); // sb의 첫글자를 삭제
			sb.append(a); // sb의 첫글자를 뒤에 이어 붙임
			
			String s = sb.toString(); // sb를 String형으로 변환
			if (s.equals(Str))
				break;
		} while (true);
		System.out.println(sb);
		br.close();
	}
}

 

 


 

 

 

  • 문제 4

생년월일을 입력하여 나이를 출력하는 프로그램

 

입력

생년/월/일을 입력하세요>>  991021

 

출력

나이는 23살 입니다.

 

제출

import java.util.Calendar;
import java.util.Scanner;

public class Cal_num {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Calendar birth = Calendar.getInstance();
		
		System.out.print("생년/월/일을 입력하세요>>");
		String info = sc.nextLine();
		String year = info.substring(0, 2); // 연도

		int y = Integer.parseInt(year);
		int N_year = (birth.get(Calendar.YEAR)) % 2000;

		int age = N_year - y;

		if (age < 0)
			System.out.println("나이는 " + (age + 101) + "살 입니다.");
		else
			System.out.println("나이는 " + (age + 1) + "살 입니다.");
		
		sc.close();
	}

}

 

멘토의 조언

Calendar는 static메서드 이므로 직접적으로 클래스에 가능하고 getInstance라는 메서드 내부에서 자동적으로 생성자가 생성이 된다고 했다.

 

 


 

 

지금까지 자주 쓰지만 깊게 알지 못했던 클래스들을 많이 알게 되어서 좋은 시간이었다.

맨 위로

'JAVA' 카테고리의 다른 글

[JAVA] 튜터링 11일차!(2021-08-09)  (0) 2021.08.11
[JAVA] 튜터링 10일차! (2021-08-04)  (0) 2021.08.06
[JAVA] 튜터링 8일차!!(2021-07-30)  (0) 2021.08.03
[JAVA] 공부 7일차! (2021-07-28)  (0) 2021.07.29
[JAVA] 공부 6일차! (2021-07-26)  (0) 2021.07.28