상세 컨텐츠

본문 제목

프로그래머 도전기 28일차

프로그래머가 될거야!

by Choyee 2023. 9. 26. 00:01

본문

오늘은

오늘은 새로운 한주의 시작인 월요일입니다

학원에 가서 Java 수업을 받고 돌아와서 코딩테스트도 풀고

JavaScript 독학을 하였습니다

이제는 확실히 이런 생활에 익숙해진 듯 합니다

가끔은 푹 쉬고싶을 때가 있긴하지만...

오늘도 열심히 해보았습니다

 

Java 수업

<스레드>
main() - 스레드(Thread, 작업) : 싱글 스레드
멀티 스레드 - 2개의 작업을 동시에 할수 있도록

ex) 띵 글자 5번 출력
beep() - 소리

class Task implements Runnable{
      @Override 
       publi void run(){
        // 스레드가 실행할 코드;
       }
}

프로그램 = 하드디스크 저장
프로세스 = 하드에 있던 소스가 메모리에서 실행될때를 말함

012


쓰레드 이름 출력
getName() = 이름 가져오기
setName() = 이름 변경 
=> thread 는 run()을 구현해야 한다 

스레드 생성 방법
1. Thread thread = new Thread( new Runnable( ){
         run();
    });
2. 상속
class ThreadA extends Thread{
   run();

Thread thread = new Thread( 객체 이름 );

main() 스레드
Thread thread = new Thread()
SumThread

동기화(synchronize) = 멀티 스레드 -> 하나의 객체를 공유해서 작업 가능
                                           -> 다른 스레드에 의해 데이터가 쉽게 변경될 수 없도록 작업이 끝날 때까지만 객체 자금
                                               => 동기화 메서드
 lock => synchronize void setMemory(){
             }

0



<데이터 입출력>
데이터 입출력 - 파일 입출력

주기억장치 - 메모리
입력 - Scanner(System.in);
출력 - Syste m.out.print(); 

하드디스크 - 파일입출력
a.txt, test.bd, data.dat
data - 텍스트, 소리, 영상, 이미지
스트림(stream) - 데이터가 회선을 통해 패킷 단위로 전송되는 것
ㄴ 자료구조 스트림과 다름
                   - 바이트(byte) 단위 스트림 : 그림, 영상, 음악 파일
                       => InputStram(읽기 클래스), OutputStream(쓰기 클래스)
                   - 문자단위(char) 스트림 : 문자만 보내도록 특화됨
                       => Reader(읽기 클래스)-FileReader, Writer(쓰기 클래스)-FileWriter

01


boolean(1bit) < byte < char(2byte) < int(4byte) < long(8byte)

(* 스레드, 네트워크 => 교재에 나오지 않음...)
네트워크(TCP) - 서버와 클라이언트
Socket(소켓) -> 통신의 장치

사진 복사(이미지를 읽어와서 쓰기)
img1.jpg -> img2.jpg


<비트 연산자>
연산자
비교 연산자
논리 연산자 - &&, ||, ! 
비트 연산자 - 비트 논리 연산자 : &, |
               - 비트 이동 연산자 : >>, <<
                  a << 2 - 변수 a를 2비트 만큼 왼쪽으로 이동
                  00000010 << 2 = 00001000 => 2 -> 8

0

<자료구조>
ArrayList => Queue = 선입선출
add('a')
add('b')
add('c')
a b c 로 저장 -> a b c 로 출력 => Queue방식
0 1 2 인덱싱

ArrayList => Stack = 후입선출
push('a')
push('b')
push('c')
a b c 로 저장 -> c b a 로 출력(제거) => Strack방식

01234

JavaScript

<<배열>>
배열, 데이터구조 -> 다중 값을 하나의 변수에 저장할 수 있게 된다

배열을 만드는 방법 = 대괄호 사용
let students = [ ];
let colors = ['red', 'orange', 'yellow'];
let lottoNums = [19,22,56,12,51];
let stuff = [true, 68, 'cat', null];

문자열과 마찬가지로 0부터 세기 시작합니다

문자열 메서드
Push( ) = 배열 끝의 항목 추가
Pop( ) = 배열 끝의 항목 제거
Shift( ) = 배열 처음의 항목 제거
Unshift( ) = 배열 처음의 항목 추가

concat( ) = 접합, 배열을 합치되 기존의 배열을 수정하진 않는다
includes( ) = boolean 메서드의 일종 -> true, false값을 반환
                ()있는 요소를 포함하고 있는지 판단
indexOf( ) = ()안에 있는 요소가 처음 등장하는 인덱스 위치값을 반환/ 없다면 -1을 반환
reverse( ) = 배열을 뒤집어준다 = 원본을 바꿔버린다

slice( ) = 배열의 일부를 복사 (시작점, 끝지점) 끝지점 바로 앞까지 잘라준다
            = 시작점 포함O 끝지점 포함X
            = 시작점 인덱스를 음수로 넣으면 배열의 끝에서부터 시작한다

splice( ) = (들어가고싶은 인덱스 번호, 얼마나 많이 삭제할지(0가능), 뭘 삽입할지(선택사항)) 
           = 원래 배열 자체를 변경O, 복사본X

sort( ) = 배열을 줄이는 메서드 
            배열.sort() -> 괄호 안에 아무것도 넣지 않고 사용하면 모든것을 문자열로 변환
            첫번째 숫자만을 비교하여 정렬 -> 1, 100, 23, 3, 48, 5 

 

 

코딩 테스트
Description
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요
function solution(n) {
    var answer = [];
    // 정수 n
    // n 이하의 홀수 -> 오름차순으로 담긴 배열
    for(var i = 0; i <= n; i++){
        if(i % 2 != 0){
           answer.push(i);
        }
    }
    return answer;
}

정수배열.push(정수값); 함수를 이용하여 배열에 정수를 차례로 넣을 수 있다
n만큼 담긴 배열에 filter()함수를 사용해서 풀이할 수도 있다

 

*filter() 함수
arr.filter(callback(element, index, array), thisArg)

 

arr = 순회하고자 하는 배열
element  = 현재 배열의 요수
index = 현재 배열 요소의 index => 생략 가능 (_ 언더바로 표시)
array = filter 함수를 호출한 배열 => 생략 가능
thisArg = callback을 실행할 때 this로 사용되는 값(= map 함수에서 사용될 this 값) => 생략가능

특징 - 값이 존재하는 인덱스에 대해서만 호출
      - 삭제 또는 값이 없는 배열 => filter 함수 실행X
      - 기존 배열의 값은 변경X
      - 처리되는 범위 = callback의 첫 호출 전에 설정 => callback 호출 후 기존 배열을 추가해도
                                                                      추가된 요소는 filter 함수에서 반영X

 

Description
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
function solution(num_list, n) {
    var answer = [];
    // 첫번째 원소부터 마지막 원소까지
    // 첫번째 원소부터 n개 간격으로 마지막원소까지
    // 저장되어 있는 원소를 차례로 담은 리스트
    
    for(var i = 0; i < num_list.length; i+=n){
        answer.push(num_list[i]);
    }
    return answer;
}

 

 

Description
어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
function solution(n) {
    var answer = 0;
    // 어떤 자연수 제곱 => 제곱수
    // 정수 n -> n이 제곱수라면 1, 아니라면 2 
    if(Number.isInteger(Math.sqrt(n)) == true){
       answer = 1;
       }else{
        answer = 2;
    }
    return answer;
}

Math.sqrt() = 숫자의 제곱근 반환
Number.isInteger() => 정수라면 true 실수라면 false 
=> 삼항연산자로 풀이 가능
= return Number.isInteger(Math.sqrt(n)) ? 1 : 2;

 

Description
정수 배열 arr와 자연수 k가 주어집니다. 만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다. 이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.
function solution(arr, k) {
    
    var answer = [];
    // k가 홀수라면
    // 모든 원소에 k를 곱하고
    // k가 짝수라면
    // 모든 원소에 k를 더한다
    
    if(k % 2 != 0){
        for(var i = 0; i < arr.length; i++){
            answer.push(arr[i]*k);
        }
    }else {
        for(var i = 0; i < arr.length; i++){
            answer.push(arr[i]+k);
        }
    }
    return answer;
}

조건식의 실행문만 주의하고 push() 함수를 사용하여 풀이

 

 

 

 

2023. 09. 25(월)

관련글 더보기