20210115-TIL
공부할 내용
- 알고리즘 복습 및 과제
- 운영체제 복습 및 과제
- TiL 정리 및 Git & 블로그 업데이트
오늘 공부한 것 & 배운 내용
알고리즘 복습 및 과제
- 
- 싱글은 간단히 구현했는데 더블은 생각보다 어려워서 한참 걸려서 했는데 에러가 많아서 solution을 보면서 다시구현했는데 내가 구현해놓은것에 구멍이 많았다
- 링크드리스트 구조를 익히기에 좋은 예제 였던 것 같다.
 
- 
- 수업에서 배열을 이용한 BinaryTree구현 예제를 알려주셔서 재귀함수를 이용하는 것을 알아서 대부분 쉽게 구현할 수 있었다
- bfs를 통한 탐색이 어려웠는데 기존것과는 다르게 재귀함수로 풀수가 없었기 때문이다
- 동료의 힌트로 queue를 활용하는 것을 알았고 queue에 순서대로 넣은것을 빼가면서 탐색하는 방식으로 문제를 해결할 수 있었다
 
 
알고리즘 문제 풀이
가운데글자가져오기
- 풀이
class Solution {
    public String solution(String s) {
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        if (chars.length % 2 == 0 ) {
            int half = chars.length/2;
            stringBuilder.append(chars[half-1]);
            stringBuilder.append(chars[half]);
        } else {
            int half = chars.length/2+1;
            stringBuilder.append(chars[half-1]);
        }
        return stringBuilder.toString();
    }
}
- 
String에 길이가 짝수인지 홀수인지 구해서 출력해주는 간단한 문제였다 return word.substring((word.length()-1) / 2, word.length()/2 + 1);   
 
- 다른사람의 풀이를 보니 한줄로도 해결되는 것 같다..
- subString의 2번째 param은 -1이라는 것을 이용한 풀이었다. 
 
 
같은숫자는싫어
- 
풀이 import java.util.*;
public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        int temp = -1;
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != temp) {
               list.add(arr[i]);
            }
            temp = arr[i];
        }
        return list.stream().mapToInt(i -> i).toArray();
    }
}
 
- Integer list를 int[]로 변환할대 stream을 이용해서 하는 것을 연습할수 있었다
- Integer[]를 int[]로 바꾸는 것보단 더 간단하게 할 수 있는 것 같다
 
 
나누어떨어지는숫자배열
- 
풀이 import java.util.ArrayList;
import java.util.List;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i <arr.length ; i++) {
            if(arr[i] % divisor == 0) {
                list.add(arr[i]);
            }
        }
        if (list.isEmpty()) {
            list.add(-1);
        }
        return list.stream().mapToInt(i ->i).sorted().toArray();
    }
}
 
- 위의 문제와 크게 다르지않게 분류해서 list에 넣어서 정렬해서 int[]로 변환해서 풀수 있었다
 
두정수사이의합
- 
풀이 class Solution {
    public long solution(int a, int b) {
        long bigNum ;
        long smallNum;
        long answer = 0;
        if(a==b) {
            return a;
        } else if(a > b) {
            bigNum = a;
            smallNum = b;
        } else {
            bigNum = b;
            smallNum = a;
        }
        for (long i = smallNum; i <= bigNum ; i++) {
                answer += i;
        }
        return answer;
    }
}
 
- 
큰 값을 구해서 for문을 통해 합을 해나가는 방식으로 풀었다 
- 
다른풀이를 보니 큰값을 구하는데 삼항연산자를 통해 간단히 구하는게 편해보였다 
- 
가장 효율적인 답안은 등차수열에 합을 통해서 구하는 것 같았다    public long solution(int a, int b) {
        return sumAtoB(Math.min(a, b), Math.max(b, a));
    }
    private long sumAtoB(long a, long b) {
        return (b - a + 1) * (a + b) / 2;
 
 
 
내일 공부할 내용
- 운영체제 복습 및 과제
- 알고리즘 문제풀이
- TiL 정리 및 Git & 블로그 업데이트
Author And Source
                            
                            이 문제에 관하여(20210115-TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@foeverna/20210115-TIL
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
알고리즘 복습 및 과제
- 
- 싱글은 간단히 구현했는데 더블은 생각보다 어려워서 한참 걸려서 했는데 에러가 많아서 solution을 보면서 다시구현했는데 내가 구현해놓은것에 구멍이 많았다
- 링크드리스트 구조를 익히기에 좋은 예제 였던 것 같다.
 
- 
- 수업에서 배열을 이용한 BinaryTree구현 예제를 알려주셔서 재귀함수를 이용하는 것을 알아서 대부분 쉽게 구현할 수 있었다- bfs를 통한 탐색이 어려웠는데 기존것과는 다르게 재귀함수로 풀수가 없었기 때문이다
- 동료의 힌트로 queue를 활용하는 것을 알았고 queue에 순서대로 넣은것을 빼가면서 탐색하는 방식으로 문제를 해결할 수 있었다
 
 
- 수업에서 배열을 이용한 BinaryTree구현 예제를 알려주셔서 재귀함수를 이용하는 것을 알아서 대부분 쉽게 구현할 수 있었다
알고리즘 문제 풀이
가운데글자가져오기
- 풀이
class Solution {
    public String solution(String s) {
        char[] chars = s.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        if (chars.length % 2 == 0 ) {
            int half = chars.length/2;
            stringBuilder.append(chars[half-1]);
            stringBuilder.append(chars[half]);
        } else {
            int half = chars.length/2+1;
            stringBuilder.append(chars[half-1]);
        }
        return stringBuilder.toString();
    }
}- 
String에 길이가 짝수인지 홀수인지 구해서 출력해주는 간단한 문제였다 return word.substring((word.length()-1) / 2, word.length()/2 + 1);- 다른사람의 풀이를 보니 한줄로도 해결되는 것 같다..- subString의 2번째 param은 -1이라는 것을 이용한 풀이었다.
 
 
- 다른사람의 풀이를 보니 한줄로도 해결되는 것 같다..
같은숫자는싫어
- 
풀이 import java.util.*; public class Solution { public int[] solution(int []arr) { int[] answer = {}; int temp = -1; List<Integer> list = new ArrayList<>(); for (int i = 0; i < arr.length; i++) { if (arr[i] != temp) { list.add(arr[i]); } temp = arr[i]; } return list.stream().mapToInt(i -> i).toArray(); } }- Integer list를 int[]로 변환할대 stream을 이용해서 하는 것을 연습할수 있었다- Integer[]를 int[]로 바꾸는 것보단 더 간단하게 할 수 있는 것 같다
 
 
- Integer list를 int[]로 변환할대 stream을 이용해서 하는 것을 연습할수 있었다
나누어떨어지는숫자배열
- 
풀이 import java.util.ArrayList; import java.util.List; class Solution { public int[] solution(int[] arr, int divisor) { List<Integer> list = new ArrayList<>(); for (int i = 0; i <arr.length ; i++) { if(arr[i] % divisor == 0) { list.add(arr[i]); } } if (list.isEmpty()) { list.add(-1); } return list.stream().mapToInt(i ->i).sorted().toArray(); } }- 위의 문제와 크게 다르지않게 분류해서 list에 넣어서 정렬해서 int[]로 변환해서 풀수 있었다
 
두정수사이의합
- 
풀이 class Solution { public long solution(int a, int b) { long bigNum ; long smallNum; long answer = 0; if(a==b) { return a; } else if(a > b) { bigNum = a; smallNum = b; } else { bigNum = b; smallNum = a; } for (long i = smallNum; i <= bigNum ; i++) { answer += i; } return answer; } }- 
큰 값을 구해서 for문을 통해 합을 해나가는 방식으로 풀었다 
- 
다른풀이를 보니 큰값을 구하는데 삼항연산자를 통해 간단히 구하는게 편해보였다 - 
가장 효율적인 답안은 등차수열에 합을 통해서 구하는 것 같았다 public long solution(int a, int b) { return sumAtoB(Math.min(a, b), Math.max(b, a)); } private long sumAtoB(long a, long b) { return (b - a + 1) * (a + b) / 2;
 
- 
 
- 
내일 공부할 내용
- 운영체제 복습 및 과제
- 알고리즘 문제풀이
- TiL 정리 및 Git & 블로그 업데이트
Author And Source
                            
                            이 문제에 관하여(20210115-TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://velog.io/@foeverna/20210115-TIL
                            
                            
                            
                                저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Author And Source
이 문제에 관하여(20210115-TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@foeverna/20210115-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)