개강이 한 달도 안 남은 날이 왔다...ㅜㅜ
튜터링 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 |