[내일배움캠프] 11/21 월요일 TIL 회고록
9시 튜터님 강의
템플릿 메소드 패턴 찾아보기 -> OCP 원칙의 좋은 예
setter = 값을 변경하지 말기 , 역할,책임,협력에 집중
1-27 스트림 퀴즈
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("김정우", "김호정", "이하늘", "이정희", "박정우", "박지현", "정우석", "이지수");
System.out.println(names.stream()
.filter(name -> name.startsWith("이"))
.count());
}
}
1-28 네트워킹 - Retrofit, OpenAPI
자바 강의를 전부 들었다. 쉬운 부분은 쉽고 어려운 부분은 어려웠다.
강사님이 모르는게 정상이고 모르는 부분이 있으면 검색을 활용하라 하셔서 모르는 부분이 생기면 구글링해서 알아봐야겠다.
강의를 다 듣고 어떤 강의를 들을지 생각하다 파이썬 알고리즘 강의를 들으려고 했는데 너무 수준이 높아서
프로그래머스에 있는 코딩테스트 입문을 차례차례 풀어보자 결심하고 하나하나 순서대로(정답률 높은 순) 풀었다.
1. 코딩테스트 입문 - 두수의 곱
풀이
class Solution {
public int solution(int num1, int num2) {
int answer = num1 * num2;
return answer;
}
}
2. 코딩테스트 입문 - 두 수의 차
풀이
class Solution {
public int solution(int num1, int num2) {
int answer = num1 - num2;
return answer;
}
}
3. 코딩테스트 입문 - 나이 출력
문제 설명
풀이
class Solution {
public int solution(int age) {
int answer = 2023 - age;
return answer;
}
}
2022-age 하니까 한살이 더 많아져서 2023을 넣었다 ㅋㅋㅋ
4. 코딩테스트 입문 - 나머지 구하기
풀이
class Solution {
public int solution(int num1, int num2) {
int answer = num1 % num2;
return answer;
}
}
처음에 짝수/홀수 구하듯이 if문을 썼는데 에러가 나와서 문제를 잘 보니 나머지 0과 1을 구하는게 아닌
그냥 나머지를 return 하는 문제여서 후다닥 고쳤다
5. 코딩테스트 입문- 몫 구하기
풀이
class Solution {
public int solution(int num1, int num2) {
int answer = num1 / num2;
return answer;
}
}
6. 코딩테스트 입문 - 숫자 비교하기
num1 이랑 num2 가 같으면 1, 다르면 -1을 return 하는 문제
풀이
class Solution {
public int solution(int num1, int num2) {
if(num1 == num2){
return 1;
} else return -1;
}
}
7. 코딩테스트 입문 - 짝수의 합
정수 n이 주어질 떄, n 이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성하기.
class Solution {
public int solution(int n) {
int answer = 0;
for(int num = 0 ; num <= n; num++){
if (num % 2 == 0) {
answer += num;
}
}
return answer;
}
}
이 문제는 좀 어려웠다.. ㅋㅋㅋㅋ 어려워서 해설을 참고해서 풀었다.
8. 코딩테스트 입문 - 양꼬치
문제 설명
풀이
1. 양꼬치 10인분을 먹을때마다 음료수 한병이 공짜니까 반복문 for문을 이용해 정수 ser이 10으로 나눌때 나머지가 0이면
미리 정의한 정수 service에 1을 추가 해 주는 코드를 만들었다.
class Solution {
public int solution(int n, int k) {
int service = 0;
for (int ser = 1; ser <= n; ser++) {
if (ser % 10 == 0) {
service += 1;
}
}
주의해야 할 점은 ser을 0부터 시작하면 0 % 10은 0이므로 불 필요한 1이 추가되니까 ser는 1부터 시작하도록 만들었다.
2. 양꼬치 1인분 값인 12000원에 양꼬치 갯수로 들어오는 변수 n을 곱한 값을 변수 sheep 에 보관하도록 선언했다.
3. 음료수 1인분 값인
2000원 * (음료수 갯수로 들어오는 변수 k에 미리 선언한 변수 service를 뺀 값) 을 변수 drink 에 보관하도록 선언했다.
그리고 변수 sheep이랑 drink 를 더한 값을 리턴시켰다.
int sheep = 12000 * n;
int drink = 2000 * (k - service);
return sheep + drink;
전체 코드
class Solution {
public int solution(int n, int k) {
int service = 0;
for (int ser = 1; ser <= n; ser++) {
if (ser % 10 == 0) {
service += 1;
}
}
int sheep = 12000 * n;
int drink = 2000 * (k - service);
return sheep + drink;
}
}
9. 코딩테스트 입문- 머쓱이보다 키 큰 사람
문제 설명
풀이
1. height가 머쓱이의 키, array 가 다른 사람들의 키이다.
2. 배열의 길이만큼 for문을 반복해야하므로 array.length를 쓴다.
3. 배열의 인덱스(array[i]) 안에 있는 값이 height 보다 크다면 result에 1을 더한다.
class Solution {
public int solution(int[] array, int height) {
int result = 0;
for(int i = 0 ; i < array.length ; i++){
if(array[i] > height){
result += 1;
}
}
return result;
}
}
또, 향상된 for문을 이용해서도 풀 수 있다.
향상된 for문의 장점
- 간편하고, 가독성이 좋다.
- 배열 인덱스 문제를 해결해 준다.(ArrayIndexOutOfBoundsException 예외를 피할 수 있다.)
향상된 for문의 단점
- 인덱스를 사용하지 못한다. (일반 for문의 int i = 0 ; 같은 인덱스를 말하는 것)
- 배열이나 ArrayList 값을 사용할 수는 있지만 절대 수정할 수는 없다.
하단 블로그를 참조했다.
https://java119.tistory.com/107
[Java] 향상된,개선된 for 문 개념,문법 총 정리
for each문 , 개선된 for문 , 향상된 for문 다양하게 부르지만 본문에선 개선된 for문이라 명칭 하겠습니다. 개선된 for 문 조건 1.JDK 1.5 이상 2.사용할 변수는 지역변수로 인식된다. (For문 안에서 사용
java119.tistory.com
전체 코드
class Solution {
public int solution(int[] array, int height) {
int result = 0;
for (int i : array){ // 향상된 for문 사용
if (i > height){ // i가 height 보다 크면
result +=1; // result 의 값을 1 증가시킨다.
}
}
return result;
}
}
10. 피자 나눠 먹기(3)
문제 설명
풀이
1. 값을 담을 정수형 변수 result를 선언
2. 피자를 먹는 사람의 수 n을 피자 조각 수 slice 로 나눈 나머지가 0이면
피자를 먹는 사람의 수 n을 피자 조각 수 slice 로 나눈 몫을 result에 담고 출력
3. 만약 피자를 먹는 사람의 수 n을 피자 조각 수 slice 로 나눈 나머지가 0이 아니면
피자를 먹는 사람의 수 n을 피자 조각 수 slice 로 나눈 몫에 +1을 더해 result에 담고 출력
class Solution {
public int solution(int slice, int n) {
int result = 0;
if (n % slice == 0 ){
result = n / slice;
} else {
result = n /slice +1 ;
}
return result;
}
}
오늘은 여기까지 풀었다.
내일 살짝 복습한 다음에 차근차근 풀어봐야겠다. 아직 입문이라 그런지 쉽기도 하고 재밌다 ㅋㅋㅋ