전체 글 108

[Boj/백준] 1316 Python

문제출처: https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 1. 문제 접근 방식 문자열을 순환한다 => 연속하지 않는 문자열 발견 => 해당문자(x[j])를 시작으로하는 새로운 문자열을 생성(newx) => 새롭게 생성된 문자열안에 해당 문자(x[j])가 존재하면 no 카운트를 증가시키면서 그룹단어에서 제외시킨다. 2. 내가 푼 코드 import sys case = int(sys.stdin.readline()) ..

[Boj문제풀이] 2021.08.18

[Boj/백준] 2941 Python

문제출처: https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 1. 문제 접근 방식 배열을 for문으로 순환하면서 배열에 있는 원소가 문자열에 존재한다면 원소를 공백으로 대체한다. 마지막으로 공백을 포함한 바뀐 문자열의 길이를 출력한다. 2. 문제 코드 import sys arr = ['c=','c-','dz=','d-','lj','nj','s=','z='] x = sys.stdin.readline().stri..

[Boj문제풀이] 2021.08.18

[Boj/백준] 7785 Python

문제출처: https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 1. 문제 접근 방식 enter인 경우 append메소드를 사용해 배열에 삽입했고 leave인 경우 remove메소드를 사용해 배열에서 해당 원소를 제거했다. 2. 내가 푼 코드 import sys case = int(sys.stdin.readline()) arr=[] for i in range(case): x,y = map(str,sys.stdi..

[Boj문제풀이] 2021.08.18

[JavaScript/DeepDive]48.모듈

[48.1] 모듈의 일반적 의미 모듈이란 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각을 말한다. 일반적으로 모듈은 기능을 기준으로 파일 단위로 분리한다. 이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다. 자신만의 파일 스코프를 갖는 모듈의 자산(모듈에 포함되어 있는 변수, 함수, 객체 등)은 기본적으로 비공개 상태다. 다시 말해, 자신만의 파일 스코프를 갖는 모듈의 모든 자산은 캡슐화되어 다른 모듈에서 접근할 수 없다. 즉, 모듈은 개별적 존재로서 애플리케이션과 분리되어 존재한다. 하지만 애플리케이션과 완전히 분리되어 개별적으로 존재하는 모듈은 재사용이 불가능하므로 존재의 의미가 없다. 모듈은 애플리케이션이나 다른 모듈에 의해 재사용되어야 의미..

[JavaScript/DeepDive]47.에러처리

[47.1] 에러 처리의 필요성 try ... catch 문을 사용해 발생한 에러에 적절하게 대응하면 프로그램이 강제 종료되지 않고 계속해서 코드를 실행시킬 수 있다. console.log('[Start]'); try { foo( ); } catch (error) { console.error('[에러 발생]', error); // [에러 발생] ReferenceError: foo is not defined } // 발생한 에러에 적절한 대응을 하면 프로그램이 강제 종료되지 않는다. console.log('[End]'); [47.2] try ... catch ... finally 문 try ... catch ... finally 문은 다음과 같이 3개의 코드 블록으로 구성된다. finally 문은 불필요하..

[JavaScript/DeepDive]46.제너레이터와 async/await

[46.1] 제네레이터란? ES6에서 도입된 제너레이터는 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 수 있는 특수한 함수다. 제네레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도할 수 있다. 제너레이터 함수는 함수 호출자와 함수의 상태를 주고받을 수 있다. 제너레이터 함수를 호출하면 제너레이터 객체를 반환한다. [46.2] 제너레이터 함수의 정의 제너레이터 함수는 function* 키워드로 선언한다. 그리고 하나 이상의 yield 표현식을 포함한다. 이것을 제외하면 일반 함수를 정의하는 방법과 같다. // 제너레이터 함수 선언문 function* getDecFunc( ) { yield 1; } // 제너레이터 함수 표현식 const genExpFunc = function* ( ) {..

[JavaScript/DeepDive]45.프로미스

[45.1] 비동기 처리를 위한 콜백 패턴의 단점 비동기 함수란 함수 내부에 비동기로 동작하는 코드를 포함한 함수를 말한다. 비동기 함수를 호출하면 함수 내부의 비동기로 동작하는 코드가 완료되지 않았다 해도 기다리지 않고 즉시 종료된다. 즉, 비동기 함수 내부의 비동기로 동작하는 코드는 비동기 함수가 종료된 이후에 완료된다. 따라서 비동기 함수 내부의 비동기로 동작하는 코드에서 처리 결과를 외부로 반환하거나 상위 스코프의 변수에 할당하면 기대한 대로 동작하지 않는다. 비동기 함수는 비동기 처리 결과를 외부에 반환할 수 없고, 상위 스코프의 변수에 할당할 수도 없다. 따라서 비동기 함수의 처리 결과(서버의 응답 등)에 대한 후속 처리는 비동기 함수 내부에서 수행해야 한다. 이때 비동기 함수를 범용적으로 사..

[JavaScript/DeepDive]44.REST API

REST는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처고, REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미한다. [44.2] REST API 설계 원칙 REST에서 가장 중요한 기본적인 원칙은 두 가지다. URI는 리소스를 표현하는 데 집중하고 행위에 대한 정의는 HTTP 요청 메서드를 통해 하는 것이 RESTful API를 설계하는 중심 규칙이다. URI는 리소스를 표현해야 한다. URI는 리소스를 표현하는 데 중점을 두어야 한다. 리소르르 식별할 수 있는 이름은 동사보다는 명사를 사용한다. 따라서 이름에 get 같은 행위에 대한 표현이 들어가서는 안 된다. #bad GET / getTodos/1 GET/ todos/show/1 #good GE..

[JavaScript/DeepDive]43.Ajax

[43.1] Ajax란? Ajax란 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 말한다. Ajax는 브라우저에서 제공하는 Web API인 XMLHttpRequest 객체를 기반으로 동작한다. XMLHttpRequest는 HTTP 비동기 통신을 위한 메서드와 프로퍼티를 제공한다. Ajax는 전통적인 방식과 비교했을 때 다음과 같은 장점이 있다. 변경할 부분을 갱신하는 데 필요한 데이터만 서버로부터 전송받기 때문에 불필요한 데이터 통신이 발생하지 않는다. 변경할 필요가 없는 부분은 다시 렌더링하지 않는다. 따라서 화면이 순간적으로 깜박이는 현상이 발생하지 않는다. 클라이언트와 서버와의 통신이 비동..

[JavaScript/DeepDive]42.비동기 프로그래밍

[42.1] 동기 처리와 비동기 처리 자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다. 자바스크립트 엔진은 한 번에 하나의 태스크만 실행할 수 있는 싱글 스레드 방식으로 동작한다. 싱글 스레드 방식은 한 번에 하나의 태스크만 실행할 수 있기 때문에 처리에 시간이 걸리는 태스크를 실행하는 경우 블로킹(작업 중단)이 발생한다. 현재 실행중인 태스크가 종료할 때까지 다음에 실행될 태스크가 대기하는 방식을 동기처리라고 한다. 동기 처리 방식은 태스크를 순서대로 하나씩 처리하므로 실행 순서가 보장된다는 장점이 있지만, 앞선 태스크가 종료할 때까지 이후 태스크들이 블로킹되는 단점이 있다. 현재 실행 중인 태스크가 종료되지 않은 상태라 해도 다음 태스크를 곧바로 실행하는 방식을 비동기처리라고 한다. 타이머..