오랜만의 수업이라 아침에 깨어나기 힘들었다. 여행 때문에 블로그 작성, 공부를 하지 못한 3일동안을 빼면 그래도 꾸준히 했던 탓에 적응은 되게 빨리 되는 것 같다. 수업의 시작은 여태껏 블로그 작성이나 깃 허브를 잘 업로드하고 있었는지 강사님의 확인부터 시작했다. 나는 여행 간 3일은 빼면 꾸준히 문제풀이와 유튜브 시청한 내용을 정리해서 올렸기 때문에 무난히 통과 했다(3일은 왜 안올렸냐고 물으셔서 여행다녀왔다고 말씀드렸다..) 난 항상 맨 앞자리에 앉기 때문에 뒤의 동료들의 상황은 잘 모르지만 강사님이 나오셔서 왜 이렇게 많이들 안했냐고 하셨다. 난 다들 나보다 훨씬 더 빡세게 할거라고 생각했었는데 그게 아니여서 의아하기도 했고 열심히 했다고 하기도 힘든 수준이지만 그래도 조금 뿌듯하기도 했다. 서론이 길었다.
오늘 배운 것은 일단 여태껏 배운 것을 상기 시키기 위함인지 코드를 써 주시곤 코드 해석을 주석처리해서 써보라고 하셨다. 다 아는 코드라고 생각했는데 막상 글로 정리하려니 약간 버벅거리긴 했지만 주석처리해서 잘 썼다.
import java.awt.*;
import java.util.Arrays;
class Main {
public static void main(String[] args) {
// greet 매서드 호출
String msg = greet("Jin"); //name 값 입력
System.out.println(msg); // msg 출력
// createPoint 매서드 호출
Point point = createPoint(5, 10); // createPoint x에 5 y에 10
System.out.println("Point create at(" + point.x + ", " + point.y + ")"); // point 값 출력
// firstNEvenNumbers 메서드 호출
int[] evens = firstNEvenNumbers(5); // 배열 5개 입력
System.out.println("first 5 even numbers : " + Arrays.toString(evens)); // 배열 5개 출력
}
// greet 메서드 생성
public static String greet(String name) {
return "Hello, " + name + "!"; // 인삿말과 이름 리턴
}
// createPoint 메서드 생성
public static Point createPoint(int x, int y) {
return new Point(x, y); // 포인트 값 리턴
}
// firstNEvenNumbers 메서드 생성
public static int[] firstNEvenNumbers(int n) {
int[] evenNumbers = new int[n]; // 배열 생성
for (int i = 0, num = 2; i < n; i++, num += 2) {
evenNumbers[i] = num; // 입력 된 수만큼 짝수 값 배열에 저장 (입력값이 5니까 다섯번 저장)
}
return evenNumbers; // 저장 된 배열 짝수 값 리턴
}
}
// 출력 :
//hello, Jin!
//Point create at(5, 10)
//first 5 even numbers : [2, 4, 6, 8, 10]
나는 이렇게 썻고 강사님이 해석해주신 것은 매개변수나 문자열, 인스턴스까지 나올 정도로 상세하게 해석하셨다. 나중엔 그림을 그리셔서 그대로 가져오지는 못할 것 같다. 근데 난 이정도로 해석하면 충분하지 않나 싶다. 코드가 어떻게 작동되고 어디서 값을 가져오고 어떻게 출력되는지 알면 된거 아닌가.
그리고 감 찾기를 위해서 소수찾기 문제만 그 이후로 수업 마칠 때 까지 풀었다.
처음엔 값을 입력했을 때 소수인가 아닌가를 판별하는 코드를 작성했다.
public static boolean isPrimeNumbers(int m) {
if (m == 1){
return false;
}
for (int i = 2; i < m; i++) {
if (m % i == 0) {
return false;
}
}
return true;
}
}
이거까지는 쉽게 했었는데 이후에 문제가 어려웠다.
값을 입력하면 특정 값 까지 소수가 몇개가 있는지 출력해주는 코드를 작성하는데 어려움을 겪었다.
난 계속 하다가 안돼서 강사님의 풀이를 보고 했는데, 위의 코드를 활용하는 방식으로 강사님은 코드를 보여주셨다.
나도 저 코드를 활용하려고 했는데 강사님 처럼 활용하는게 아니고 메서드 하나 안에 다 집어넣으려고 했었다. 일단 강사님이 풀어주신 코드는
class Main2 {
public static void main(String[] args) {
int rs = one_to_n_Prime_Numbers_count(10);
System.out.println("rs : " + rs);
// rs : 4
rs = one_to_n_Prime_Numbers_count(13);
System.out.println("rs : " + rs);
// rs : 6
rs = one_to_n_Prime_Numbers_count(100);
System.out.println("rs : " + rs);
// rs : 25
}
private static int one_to_n_Prime_Numbers_count(int m) {
int count = 0;
for (int i = 1; i <= m; i++) {
if (isPrimeNumbers(i)) {
count++;
}
}
return count;
}
public static boolean isPrimeNumbers(int m) {
if (m == 1){
return false;
}
for (int i = 2; i < m; i++) {
if (m % i == 0) {
return false;
}
}
return true;
}
}
이렇게 메서드를 그대로 두고 쓰셨다. 그래서 프로그래머스에 이 코드를 제출 했는데 효율성검사에서 통과하지 못해서 나는 배열을 활용해서 풀었다.
class Main {
public static void main(String[] args) {
int rs = one_to_n_Prime_Numbers_count(10);
System.out.println("rs : " + rs);
// rs : 4
rs = one_to_n_Prime_Numbers_count(13);
System.out.println("rs : " + rs);
// rs : 6
rs = one_to_n_Prime_Numbers_count(100);
System.out.println("rs : " + rs);
// rs : 25
}
private static int one_to_n_Prime_Numbers_count(int m) {
int count = 0;
boolean[] isPrime = new boolean[m + 1];
for (int i = 2; i <= m; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= m; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= m; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= m; i++) {
if (isPrime[i]) {
count++;
}
}
return count;
}
}
알고리즘 문제는 볼 때 마다 머리가 한 번씩 깨지면서 푸는 것 같다.
그러고 제곱근관련 문제를 주시고 취업 관련 얘기후 수업은 끝났다. 이거 포스팅 하고 바로 다음 포스팅에 제곱근 문제 풀이 해야겠다.
아직 못풀었다..
'Coding History' 카테고리의 다른 글
국비 지원 IT(웹앱개발) 취업반 강의 9일차 (0) | 2024.06.18 |
---|---|
2024. 06. 17 문제 풀이 (0) | 2024.06.18 |
2024. 06. 13 IP주소를 알아봅시다! (Feat. 공인/사설/고정/유동IP, 포트포워딩, DMZ, DDNS) (0) | 2024.06.13 |
2024.06.12 DNS가 뭔가요? + 도메인, A Record, CName (1) | 2024.06.12 |
2024. 06. 11 문제풀이 (0) | 2024.06.11 |