멀티캠퍼스 JAVA 백엔드 부트캠프/정리

멀티캠퍼스 백엔드 개발자 취업캠프(Java) 입과 11주차 정리

5ein 2023. 4. 17. 01:16

2023.04.10

오늘부터 알고리즘 수업이 시작되었다!!

 

실제 업무에서는 cpu와 ram이 둘다 중하다고 하지만 코테에서는 cpu를 더 중하게 여긴다.

 

알고리즘과 자료구조

알고리즘: 램에 저장된 데이터처리 방식 (처리방법) [검색, 정렬]

자료구조: 램에 데이터를 저장하는 방식 (저장방법)

 

순서도

순서도를 그리는 실습과, 순서도를 보고 코드를 짜는 것도 실습했다.

보기쉬운것은 순서도! 하기 쉬운건 수도코드!!

수도코드를 짜본뒤 순서도를 그려보면 좋음

 

순서도 기호

첫번째 둥근 기호는 시작, 끝을 적어두는 기호!

두번쨰 직사각형 기호는 처리할 것을 적어두는 기호!

세번쨰 다이아몬드 기호는 조건(분기)을 입력하는 기호!

네번째 평행사변형 기호는 데이터 입력에 사용되는 기호라고한다(이친구는 써보지 못함)

다섯번쨰 찢어진 직사각형 기호는 출력할것을 나타내는 기호! 

for문은 다이아몬드에 그릴수도 있고 커다란 네모 박스에 그릴수도 있다.

 

자료구조 종류

자료구조 종류

선형구조를 선호한다고 하셨다!

 

선형구조

Array구조 위치 값으로 바로 꺼내 있음

Stack구조 순서대로 push 해서 저장하고 제일 위의 (제일 마지막에 저장한 ) 부터 pop한다!

Queue 구조 순서대로 enqueue 해서 저장하고 먼저 들어간 것부터 dequeue 한다! <선착순 줄서는 구조>

 

비선형구조

비선형 구조는 tree 구조, graph 구조 있다.

 

복잡도

- 시간복잡도: cpu가 처리하는데 걸리는 시간

- 공간복잡도: 처리하는데 사용한 메모리 크기

코딩테스트에서는 시간복잡도 > 공간복잡도

 

빅오표현법

시간복잡도의 최악의 경우를 고려한 표현

빅오표현법

⭐ O(1) < O(log n) < O(n) < O(n log n) < O(n^2)

가장 왼쪽(O(1))으로 갈수록 시간 복잡도가 낮은 것(실행 횟수가 적다), 가장 오른쪽으로 갈수록 시간 복잡도가 높은 것(실행 횟수가 많다)

시간복잡도가 낮은것이 처리시간이 적게걸린다!

- O(1)

일정한 복잡도(constant complexity)라고 하며, 입력값이 증가하더라도 시간이 늘어나지 않는다.

이는 입력값의 크기와 관계없이, 즉시 출력값을 얻어낼 수 있다는 의미이다.

- O(log n)

로그 복잡도(logarithmic complexity)라고 부르며, Big-O표기법중 O(1) 다음으로 빠른 시간 복잡도를 가진다.

횟수를 거듭할 수록 경우의 수가 절반 줄어든다.

- O(n)

선형 복잡도(linear complexity)라고 부르며, 입력값이 증가함에 따라 시간 또한 같은 비율로 증가하는 것을 의미한다.

*주의* O(n/2) 이라 표기 하지 않는다. 이는 n을 2로 나눈만큼만 시간이 필요하지만, 저런 상수는 n이 무한대로 늘어나면 큰 의미가 없기 때문에 O(n+100) 이나 O(n*3)이나 O(n/2) 등 을 전부 O(n)으로 표기한다.

- O(n2) == O(n^2)

2차 복잡도(quadratic complexity)라고 부르며, 입력값이 증가함에 따라 시간이 n의 제곱수의 비율로 증가하는 것을 의미한다.

 

시간복잡도 표

아래 표 출처: https://dingrr.com/blog/post/알고리즘시간복잡도-big-o

어떤 알고리즘에서 사용되는지 궁금했었는데 이 분의 글을 보니 이해가 조금더 잘되는것 같았다!

시간복잡도 표

 

일반 자료구조의 시간복잡도

일반 자료구조의 시간복잡도

이미지 출처: Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowell (bigocheatsheet.com)

 

정렬의 시간 복잡도

이미지 출처: Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowell (bigocheatsheet.com)

수업시간에서는 Buble Sort와 Quicksort 이 둘의 Worst(최악)을 비교했다.=> 최악은 같음!

최악이 같기 때문에 Average(평균)을 비교했다. => Quicksort 가 좋다!

 

알고리즘 문제풀이를 위해 알아야할 사전지식: 배열, 컬렉션, String, 클래스(메서드 + 생성자)

배열과 컬렉션
변수의 종류

package 문자열;

import java.util.Arrays;
import java.util.List;

public class String여러가지처리방법 {

	public static void main(String[] args) {
		String s = "너는 프로그래머프야?";
		String s2 = "진짜!!";

		System.out.println(s + s2);// 스트링 결합
		System.out.println(s.concat(s2)); // 스트링 결합
		System.out.println(s.charAt(0)); // 문자 1글자 추출
		System.out.println(s.endsWith("야")); // 특정한 문자로 끝나는지 확인
		System.out.println(s.substring(3));// 인덱스3이후 글자들 모두 추출 <substring만 낙타표기법이 아님>
		System.out.println(s.substring(3, 8));// 인덱스 3~7까지 추출 <substring만 낙타표기법이 아님>
		System.out.println(s.contains(s2));// s에 s2가 포함되어있는지?
		System.out.println(s.lastIndexOf("프"));// s중 프 글자 위치
		System.out.println(s.toUpperCase());// 대문자로
		System.out.println(s.toLowerCase());// 소문자로
		System.out.println(s.length());// 글자수
		System.out.println(s.replace("너", "나"));// 너 를 나 로 바꾸기
		System.out.println(s.trim()); // 공백없애기
		
		// String은 s를 프린트할 때, 그 주소가 가르키는 char들 프린트되게 재정의 되어있는 객체이다.(toString()오버라이드)
		System.out.println(s);
		
		System.out.println((s == s2)); // 주소비교
		System.out.println(s.equals(s2));// String이 가르키는 char들이 동일한지 확인

		s2 = "안녕";
		// String은 데이터가 변경되는 경우 새로운 곳에 String을 저장할 변수를 생성한다. <메모리 관리 부분에서 비효율적!>
		// String의 값이 자주 변경되는 경우에는 Builder를 사용!
		StringBuilder s3 = new StringBuilder();
		s3.append("배고파");
		System.out.println(s3);
		
		String s4 = "감자,고구마,양파";
		String[] s5 = s4.split(", "); //("")안의 내용 단위로 잘라 String 배열에 넣기
		System.out.println(Arrays.toString(s5)); //전체를 프린트
		
		// 고구마의 위치찾기
			// 방법1
		for (int i = 0; i < s5.length; i++) {
			if (s5[i].equals("고구마")) {
				System.out.println("고구마의 위치는? " + i);
			}
		}
			// 방법2
		List<String> list = Arrays.asList(s5);
		System.out.println(list.indexOf("고구마")); //위치 알려줌!
	}

}

 

최대값 최소값 구하는방법

1. for문이용해서 전체를 순회하면서 해당인덱스까지의 최소/최대 값을 변수하나를 정해서 넣어두는 알고리즘

2. 오름차순으로 정렬한 다음 최소값(맨앞)/최대값(맨뒤) 값을 추출! (Arrays.sort()이용!)

 

여러가지 퀴즈를 푼 후 정리문제를 풀었다!

정리 문제(기본)

package 문자열;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class 정리문제_기본 {

	public static void main(String[] args) {

//		1. int값 5개 55, 66, 77, 22, 33 입력받아서, 최소값을 구해 프린트해보세요.
//		콘솔 입력값: 55 66 77 22 33
//			1) 배열 사용해야함.
//			2) Scanner사용해야함.
		Scanner sc = new Scanner(System.in);
		int[] numbers = new int[5];
		for (int i = 0; i < numbers.length; i++) {
			numbers[i] = sc.nextInt();
		}
		sc.close();

		int min = numbers[0];
		for (int x : numbers) {
			if (x < min) {
				min = x;
			}
		}
		System.out.println("최소값: " + min);
		
// --------------------------------------------------------------
		
//		2. 랜덤한 값 20개를 발생시켜, 값의 범위 0~899를 빈 배열에 넣은 후,
//		   최대값을 구해 프린트해보세요.
		Random r = new Random(5);
		int[] numbers2 = new int[20];
		for (int i = 0; i < numbers2.length; i++) {
			numbers2[i] = r.nextInt(900);
		}
		Arrays.sort(numbers2);
		System.out.println("최대값: " + numbers2[19]);
		
// --------------------------------------------------------------		

//		3. String s1 = "참좋다", String s2 = "진짜좋다" 두 문자열이 동일한지 프린트, 
//		   s1 s2글자수를 비교하여 누가 더 큰지 프린트
		String s1 = "참좋다";
		String s2 = "진짜좋다";
		if (s1 == s2) {
			System.out.println("동일하다.");
		}else {
			System.out.println("동일하지 않다.");
		}
		int n1 = s1.length();
		int n2 = s2.length();
		if (n1 > n2) {
			System.out.println("s1이 글자수가 더 많다.");
		}else if (n1 < n2) {
			System.out.println("s2가 글자수가 더 많다.");
		}else {
			System.out.println("s1과 s2의 글자수가 같다.");
		}
		
// --------------------------------------------------------------		

//		4. String s3 = "나는 진짜 java programmer가 되었어" 에서
//		   "java programmer만 추출하여 모두 대문자로 변경후 프린트
		String s3 = "나는 진짜 java programmer가 되었어";
		int w1 = s3.indexOf("j");
		int w2 = s3.lastIndexOf("r");
		String s33= s3.substring(w1, w2+1);
		System.out.println(s33.toUpperCase());
		
// --------------------------------------------------------------		

//		5. String s4 = "2056521"에서 2를 추출하여 1인 경우 남자, 2인 경우 여자로 프린트
		String s4 = "2056521";
		if (s4.charAt(0) == '1') {
			System.out.println("남자");
		}else {
			System.out.println("여자");
		}
	}

}

 

개념정리

1. 알고리즘이란?
	CPU가 처리하는 방법
2. 자료구조란?
	RAM에 저장하는 방법
3. 순서도에서 다이아몬드, 직사각형, 종이찢어진 모양의 의미?
	다이아몬드: 조건
	직사각형: 처리
	종이 찢어진 모양: 출력
4. 시간복잡도란?
	cpu가 처리하는 시간
5. 공간복잡도란?
	ram에 차지하는 공간
6. 정렬 알고리즘 중 가장 느린 것/빠른 것은?
	느린: 버블정렬
	빠른:  퀵정렬
7. 선형구조란? 예 2가지 이상
	직선형태에 저장하는 구조 (배열, 퀵, 큐)
8. 비선형구조란? 예 2가지 이상
	직선이 아닌형태에 저장하는 구조(트리, 그래프)
9. 빅오표기법은 최선인가, 평균인가, 최악의 상황에서의 시간을 말하는 것인가?
	최악의 상황
10. 배열의 길이가 10일 때, O(n)의 의미는?
	배열안에 들어있는 10개를 다 접근한다.

2023.04.11

어제 한것 복습 하고 정리문제 심화를 풀었다!

정리문제(심화)

package 문자열;

import java.util.Arrays;

public class 정리문제_심화 {
	
	public static void main(String[] args) {
//		6. String s5 = “ [  10, 20, 30, 40, 50]”에서 모든 데이터를 꺼내어 합한 값을 프린트(힌트)
//			1)[, ] – replace()를 이용하여 제거 
//			2) 10 - trim()을 이용하여 공백 제거
//			3) ,를 기준으로 split()를 이용하여 배열로 분리
//			4) 배열로 분리된 값을 꺼내 정수로 변환후, 합해줌.

		String s5 = "[  10, 20, 30, 40, 50]";
		
		//s5 = 을 해주기 전까지는 비파괴였는데 저걸루 s5를 덮어써줘야 원본이 파괴됨!
		s5 = s5.replace("[", "");
		s5 = s5.replace("]", "");
		s5 = s5.trim();
		String[] s55 = s5.split(", "); //{"10", "20", ...}으로 바꿔줌 (아직 string)
		System.out.println(s55[0]);
		System.out.println(s55[1]);
		System.out.println(s55[2]);
		
		int sum = 0; 
		//(1. int로 바꾸기)"10" --> 10, "20" --> 20 
		// ==> (2. sum에 저장)10+20=30
		for (String x : s55) {
			int x2 = Integer.parseInt(x);
			sum = sum + x2;
		}
		
		System.out.println(sum);
		
//---------------------------------------------------------------------		
		
//		7.  위 6번에서 생성된 String[]의 값을 새로운 int[]로 옮겨서 오름차순 정렬후, 프린트!
		
		//string은 length() 함수를 사용함 ex)s5.length()
		//배열은 length 를 사용함 (함수 x) ex)s55.length
		int[] newArray = new int[s55.length];
		
		for (int i = 0; i < newArray.length; i++) {
			newArray[i] = Integer.parseInt(s55[i]);
		}
		Arrays.sort(newArray);
		System.out.println(Arrays.toString(newArray));
	}
}

 

알고리즘 시험 요약

알고리즘 – 어떤 문제를 풀기위한 절차 공식적으로 표현
정렬 – 가장 느린 것(버블정렬), 가장 빠른 것(퀵정렬)
	버블정렬, 선택정렬, 퀵정렬 등등
빅오표기법 – 성능 표현법(방법의 성능을 평가할 때 사용), 가장 최악일 때를 기준으로 표현
String – length(), (length는 배열일 때 사용하는것임)
	equals(): 값을 비교할 때
	s = “hong”, s2 = “kim”
	s.substring(1) //ong (s[1] 이후로 다 프린트)
	s.indexOf(“h”) //0 (인덱스 어디인지 알아보기)
	String은 값이 변경되면 새로운 공간을 만듦(원래의 저장공간을 사용X)
		원래저장공간 사용하려면 StringBuilder 사용
	자주 변경되는 경우, String을 쓰면 메모리 관리에 비효율적이다.
	String은 값의 변경이 적은 경우 사용하면 효율적이다.
순서도 – 직사각형(처리), 다이아몬드(조건, 분기 => true/false), 종이 찢어진 사각형(출력)
Stack – 값을 저장공간에 넣는 것(push), 꺼내는것 (pop)
	맨 위(top), 맨 아래(bottom)
	Push를 하면, top이 하나 증가한다.
	top은 윗부분을 나타낸다.
	꺼낼 때는 top에서 먼저 꺼낸다.
	일주일치 책을 쭉 쌓아놓고, 위에서부터 읽어서 없앤다.
정렬 알고리즘 – 오름차순:(1, 2, 3, 4), 내림차순:(4, 3, 2, 1)
		버블, 선택, 퀵 빅오로 표현 최악의 상황 ==> O()
퀵 정렬 – 기준값(피벗) 1, 3, 9, 7, 5 정렬할때 ==> 1, 3, 5(피벗), 7, 9
	    피벗은 중간값을 사용함.
ArrayList<String> - String 데이터가 들어간 순서있는 데이터의 모음(String이외에는 넣을 수 없음)
		만약 ArrayList만 적는다면 – 기본타입은 Object을 설정한다.
시간복잡도 – cpu의 처리시간, 공간복잡도 – ram의 사용량
자료구조 – 중복X, 순서가 없는 데이터 구조(set)
큐(대기줄) – FIFO(선입선출구조, 먼저 들어온 것이 먼저 나간다.)
	         큐의 앞부분(front), 뒷부분(back, rear)
	         큐의 삭제는 front에서 이루어진다.
List – LinkedList, ArrayList, 순서O, 인덱스로 접근, FIFO(X), FILO(x),
HashMap – 키 + 값, JSON과 유사한형태, 키(유일O, 중복X), 값(중복O)

 

코딩테스트

코딩테스트 프로그래머스 사용법을 배웠는데, 이미 나는 프로그래머스 코딩테스트를 풀어보고 있어서 회원가입을 새로 하지 않고 설명만 들었다.

 

코딩테스트의 대부분이 알고리즘 검색과 정렬 위주로 문제가 나온다고 하셨다.

 

일반적으로 레벨 0,1 단계인 사람이 많기 떄문에 0단계, 1단계만 풀어도 많이 맞출 있다고 하셨다.

하지만 네카라쿠배와 삼성전자는 문제가 어렵게 출제되기 때문에 최소 레벨 3,4 있어야 한다고 하셨다.

2단계 후반부터는 문제가 너무 길기 때문에 유튜브나 인강 같은 것에서 문제를 보는 법을 따로 배워한다고 하셨다.

 

이후 프로그래머스에서 0레벨문제를 조금 푼 후, 이클립스에서 풀어보는법도 배웠다.

 

코테를 풀다가 can not find symbol 오류가 나온다면 import가 안되서 생긴 오류기 때문에

import java.util.*; 제일위에 적어주면 된다.


2023.04.12

자료구조/알고리즘의 자주 등장하는 개념
------------------------------------
0,1단계문제- 자바기본(메서드 입력/ 반환)
		배열(배열사용법, 메서드 배열입력/배열리턴)
		컬렉션(컬렉션사용법, 종류 다루는 법)
		배열 <--전환--> 컬렉션
		문자열(검색, 제거, 정렬)

오늘은 수업시간에 프로그래머스 코딩테스트 문제들을 풀었다!

혼자 풀때는 막막하고 나는 이것을 왜 못풀까? 라는 생각만 들었었는데! 강사님이랑 같이 푸니까 뭔가 더 잘풀리는것같다,

그리고 강사님께서 이걸 모른다고 상심하기 보다는 모르면 다른사람의 답을 보고 아 이렇게 푸는구나를 깨달은 다음 나중에 다시 풀어보면 된다고 하셨다!! 진짜 열심히 해야징!!

 

혼자 풀 때 삼항연산자가 너무 신기 해서 아 저것도 사용 할 줄 알아야하구나 ㅜㅜ 했었는데,

알고 있긴 해야겠지만 삼항연산자는 코테에서 사용할수는 있겠지만

실무에서 이용하는것은 기업에서 선호하지 않는다고 하셨다!!

 

팀플에서 코드를 짤때 협업하기 쉽게 기본문법 위주로 하는게 좋다고 하셨다! 만약 스트림 등의 문법을 쓰려고 한다면 팀원끼리 상의 하고 다같이 사용해야 한다고 하셨다.


2023.04.13

노션가입을 진행했다! 나는 이미 가입해둬서 다시 가입은 안하고 ! 팀 스페이스 생성하는것을 해보았다!

포폴에 노션에서 팀작업을 했다는 캡쳐본? 을 꼭 넣는것이 좋다고 하셨다(협업툴을 사용한 협업경험이 있다는것을 보여줄수 있기 때문)

 

그리고 몇가지 배열 코딩테스트 문제를 풀었다!

그중 짝수는 싫어요 라는 문제를 풀고 순서도를 그려보는 것까지 했다.

짝수는 싫어요 순서도

 

그리고 배열을 콜렉션으로 변환 하는것과, 콜렉션을 배열로 변환하는것을 해보았다!

 

배열은 .length 를 사용하고, Arraylist는 .size() 를 이용한다!!


2023.04.14

String에서 char 배열로 옮기기를 배웠다!

package 문자열;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class String에서Char배열에옮기기3 {

	//함수를 만들어서 쓰기!
	public static void print(String[] s) {
		System.out.println(Arrays.toString(s));
	}
	
	public static void main(String[] args) {
		String sno = "2056521"; // String도 index를 이용해서 추출가능
		// 01234

		// 1. 마지막 위치의 숫자가 1이면 서대문구에서 출생,
		// 1이 아니면 다른 구에서 출생 프린트
		char last = sno.charAt(sno.length() - 1);
		if (last == '1') {
			System.out.println("서대문구에서 출생");
		} else {
			System.out.println("다른 구에서 출생");
		}

		// 2. "52"를 추출하여 두 숫자를 더해보세요.
		// 더해서 10이 넘지않아야 유효한 주민번호
		// 유효한 주민번호인지 아닌지 출력

		// 방법1)
		char[] two = new char[2];
		sno.getChars(4, 6, two, 0);
		// 원본인 String인 sno에서 4~5을 추출해서
		// char[]인 two에 인덱스 0부터 넣어주세요.
		System.out.println(Arrays.toString(two));

		int i1 = Character.getNumericValue(two[0]);
		int i2 = Character.getNumericValue(two[1]);
		int sum = i1 + i2;
		System.out.println(sum);
		if (sum < 10) {
			System.out.println("유효한 주민번호 O");
		} else {
			System.out.println("유효한 주민번호 X");
		}

		// 방법2)
		String s1 = sno.substring(4, 6);
		int i3 = s1.indexOf(0);
		int i4 = s1.indexOf(1);

		if (i3 + i4 > 10)
			System.out.println("유효한 주민번호 X");
		else
			System.out.println("유효한 주민번호 O");

		// 3. 주민번호에 포함된 5의 갯수를 출력
		// String안에 들어있는 데이터를 각각 분리를 해주어야한다.

		// 방법1) String배열로 만들기 - split()
		String[] stringArray = sno.split("");
		int count = 0;
		for (String s : stringArray) {
			if (s.equals("5")) { // equals()대신 contains()도 사용가능
				count++;
			}
		}
		System.out.println(count);

		// 방법2) charAt(i)을 포문돌려서 가져오기
		int count2 = 0;
		for (int i = 0; i < sno.length(); i++) {
			char c = sno.charAt(i);
			if (c == '5') {
				count2++;
			}
		}
		System.out.println(count2);

		// for문은 break를 해주지 않으면 끝까지 간다. 그렇기 떄문에
		// 데이터가 많을수록 처리시간이 오래걸리는 특징을 가지고있다.
		// 그래서! 저런것을 해주는 함수를 사용하는 것이 좋음!
		// (모든것이 함수로 만들어져 있는것은 아니다.)

		// 인덱스를 빨리 찾는 방법(함수)
		System.out.println(Arrays.binarySearch(stringArray, "5"));

		// 배열에 특정한 값을 한꺼번에 변경하는 방법(함수)
		Arrays.fill(stringArray, 0, 3, "hoho");
		//System.out.println(Arrays.toString(stringArray));
		print(stringArray);
		
		// 배열의 순서를 다 뒤집는 방법(함수)
		Arrays.sort(stringArray); // 정렬(오름차순)
		// Arrays로 내림차순을 할 수는 있으나 너무 복잡
		// ==> 컬렉션으로 변환해서 하면 더 간단하다!
		//System.out.println(Arrays.toString(stringArray));
		print(stringArray);

		List<String> list = Arrays.asList(stringArray); // list컬렉션으로 변경
		// 오름차순으로 정렬한뒤 뒤바꾸면 내림차순 정렬됨!
		Collections.sort(list); // 정렬(오름차순)
		Collections.reverse(list); // 정렬(내림차순)
		System.out.println(list);

		// 배열안에 데이터의 빈도수(횟수)구하는 방법(함수)
		int count3 = Collections.frequency(list, "hoho");
		System.out.println(count3);

	}
}

 

함수를 만들어어서 사용하는것을 했는데!

 

파이널프로젝트에 대해 팀원들과 상의를 하는 시간을 가졌다!!

우리가 하는 프로젝트는 수익성인지, 공익성인지, 오락성인지 등을 상의하고, 주제선정 근거찾는것 등을 하는 시간을 가졌다!

 

머자막 시간에 문자반복 출력하기 문제를 풀고, 순서도(ERD) 그리는것을 했다!

문자반복 출력하기 순서도


2023.04.15 ~ 2023.04.16

4/15 토요일에는 일주일간 풀었던 코딩테스트를 혼자서 풀어보는 복습시간을 가졌다!

분명 안다고 생각했는데 막히는부분이 생각보다 많아 더 노력해야겠다는 생각이 들었다!

 

4/16 일요일에는 멀캠 이러닝을 들었다! 오늘 목표는 10개의 강의를 듣는 것이었는데, 내용이 점점 어려워져서 이해될때까지 다시 듣다보니 5개의 강의 밖에 듣지 못했다 ! 큰일이다 기간내에 다 들으려면 내일부터 하루에 3개씩 필수적으로 들어야 안전하다!  다시 파잇팅 해보자구!!!


면접에서 java(jdk)1.8 업데이트후 바뀐게 뭔지 아세요? 하면 일단 꺽쇠 문법이 추가되었다고 말하고 하나더 생각해내래

  • 람다 표현식 (Lambda expression): 함수형 프로그래밍이 가능하게 됨
  • 스트림 API (Stream API): 데이터를 추상화하여 다룰 수 있게 됨
  • java.time 패키지: 더 직관적이고 개선된 Date, Time API를 제공
  • 나즈혼 (Nashorn): 자바스크립트의 새로운 엔진을 도입

혼자서 코테 문제를 풀때는 나는 이걸 왜 모를까? 이런 생각으로 자괴감이 많이 들었었는데,

강사님께서 이거를 풀어야겠다 보다 푸는 방법이 이렇구나 하고 0,1레벨 문제를 푸는 법을 배운 다시 풀어보면 된다고 하셨다!

 

코테에서 풀이가 간결하다거나 시간복잡도에 따라 점수를 더 받는지 궁금해서 강사님꼐 여쭈어 보았다!

그렇습니다. 하지만 지금은 문제를 어떻게 푸는지에 집중하고 시간복잡도는 나중에 생각합시다 라고 하셨다.

 

보조강사님 명언 박제!

최고보단 어제의 나보다 잘하면 된다.

 

포폴에 노션에서 팀작업을 했다는 캡쳐본? 을 꼭 넣는것이 좋다고 하셨다(협업툴을 사용한 협업경험이 있다는것을 보여줄수 있기 때문)

 

다른분들의 회고를 보게 되었는데 지금 내가 하는것이 회고가 맞는것인지 다시 생각헤보았다!

회고의 뜻은 돌아보는것, 지나간일을 돌이켜 생각하는 것 인데, 배웠던 것을 정리하는것도 따지고보면 지나간일들 생각하고 정리하는것이니까? 이것도 회고라고 할 수 있지 않을까?  어쩌면 모든 글의 제목이 수정될수도 있겠다...