전체 글

전체 글

    프로그래머스 코딩테스트 연습 - 가장 가까운 같은 글자 JavaScript

    function solution(s) { const answer = []; const obj = {}; s.split("").forEach((el, idx) => { if(obj[el] === undefined) { answer.push(-1); } else { answer.push(idx - obj[el]); } obj[el] = idx; }) return answer; } 비교적 쉬운 문제였지만, 고려해야할 점이 있었다. 객체로 각 문자가 등장한 최신의 인덱스를 계산하였는데, 해당 문자의 인덱스를 계산하는 과정에서 오류가 있었다. 0이나 undefined은 모두 falsy이므로, 조건문에서 거짓으로 처리되어버리는 문제가 있었다. 따라서, 0을 인덱스로 가질 때 문제가 발생했었다. 정확히 undefin..

    react-native-config를 사용해서 env 설정하기 (+ ios 캐싱 문제 해결)

    React Native에서 env 환경 변수를 편리하게 사용할 수 있도록 돕는 라이브러리로 react-native-config를 사용할 수 있다. npm i react-native-config 설치 후 .env 파일을 생성한다. // .env BLOG_URL=https://www.tistory.com/ 이제 실제 컴포넌트에서 Config를 불러와 환경 변수를 사용할 수 있다. import React from 'react'; import {Text, View} from 'react-native'; import Config from 'react-native-config'; const App = () => { return ( tistory - {Config.BLOG_URL} ) } # ios 환경에서는 env..

    프로그래머스 코딩테스트 연습 - 할인 행사 JavaScript

    const checkValid = (wantObj, discountObj) => { for(let key in wantObj) { if(wantObj[key] > (discountObj[key] || 0)) { return false; } } return true; } function solution(want, number, discount) { let answer = 0; const wantObj = {}; for(let i = 0; i < want.length; i++) { wantObj[want[i]] = number[i]; } const discountObj = {}; for(let i = 0; i

    CPU Scheduling에 대해서

    CPU scheduling은 멀티프로그래밍으로 CPU 활용을 극대화 하기 위해서 필요하다. CPU burst와 I/O burst로 이루어진 cycle을 scheduling한다. 🍸 MS-DOS같은 단일 프로세스 OS에서는 CPU scheduling이 필요없다. CPU burst가 있고 그 뒤에 I/O burst가 발생한다. 이때, CUP는 해당 데이터가 메모리에 들어올 때까지 I/O를 기다린다. 🍫 프로세스가 I/O를 발생시킨다. 이 기다리는 시간동안, 데이터나 다른 routine을 실행시켜 CPU가 최대한 시간당 많은 작업을 할 수 있게끔 한다. 대부분의 프로세스는 CPU를 짧은 시간안에 사용한다. CPU Scheduler (Short Term Scheduler) 메모리안의 프로세스 중 하나를 선택해 ..

    간단하게 DHCP(Dynamic Host Configuration Protocol) 알아보기

    DHCP는 동적으로 IP를 할당한다. DHCP의 동작은 사용자가 알 필요없이 자동으로 이루어져 IP를 host에 할당한다. IP는 유한한 resources이다. 따라서 때로는 IP를 할당받기 위해서 구매를 해야되며, 그 IP 주소를 사용하지 않을 때 그 IP 주소는 낭비된다. DHCP는 이 IP 주소의 낭비를 막기 위해서, IP 주소의 재사용을 위해서 IP 주소를 host가 필요로 할 때만 할당한다. 🍥 특히 모바일 유저는 고정된 IP를 사용하면 번거롭기 때문에 매번 IP를 할당받아야 한다. AWS의 EC2에서도, 인스턴스를 중지시키면 사용중이던 IP 주소를 해제한다. 따라서, 다음에 다시 인스턴스를 시작하면 다른 IP 주소를 사용하게 된다. 서버에서는 IP 주소가 매번 바뀌면 불편하기에, AWS에서는 ..

    OSI(Open System Interconnection) 7 Layers 알아보기

    OSI 7 Layers를 위의 계층부터 나열하자면 이렇다. Application layer Presentation layer Session layer Transport layer Network layer Data Link layer Physical layer 하위 계층의 서비스를 받아서 상위 계층에 서비스를 제공한다. application layer와 physical layer는 반드시 필요하다. 나머지 계층은 필요하면 구현하면 된다. application layer는 메세지를 생산한다.(사용자 프로그램) host(end-system)와 host간의 통신은 network layer를 통해 일어난다. transport layer는 process간의 통신을 가능하게 한다. 🍖 transport layer의 ..

    프로그래머스 코딩테스트 연습 - 귤 고르기 JavaScript

    function solution(k, tangerine) { const weight = {} tangerine.forEach(el => { if(!weight[el]) { weight[el] = 1; }else { weight[el] += 1; } }); const sorted = Object .values(weight) .sort((a, b) => b - a); let answer = 0; for(let i = 0; i < sorted.length; i++) { k -= sorted[i]; answer++; if(k

    Objective-C 기본 문법 정리하기

    객체 지향 언어 (Object-oriented) 확장자는 .h와 .m (interface와 implementation) #import로 라이브러리를 가져올 수 있다. NSLog로 출력할 수 있다. 문자열 앞에는 @를 붙인다. 문자열 타입은 NSString을 사용한다. BOOL값은 YES 또는 NO이다. (true, false가 아니다) XCode를 통해서 코드를 빌드, 실행할 수 있다. #import int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"Test print"; NSLog(@"%@", str); NSLog(@"%d", 1000); } return 0; } @interface와 @implementation..