본문 바로가기

분류 전체보기

(388)
<그리디알고리즘> 1946번 신입 사원 with 파이썬 문제 언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오. 입력 첫째 줄..
<정보> 브라우저 새 탭 설정하기 * 들어가며.. 현재 진행중인 프로젝트를 하면서 브라우저의 새 탭을 변경하는 것이 별도의 과정이 필요하다는 것을 알게 되었다. 당연히 브라우저에서 기본으로 제공하는 기능이라 생각하고 새탭을 위한 프로젝트를 기획했는데 무용지물이 될 뻔 했다. 다행히 크롬 확장앱 스토어에 새 탭을 지정할 수 있는 앱이 있었고 생각보다 사용법이 간단해서 이렇게 기술블로그에 포스팅을 작성하게 되었다. 같은 크로미움 기반인 크롬, 웨일, 엣지 등에서도 동일하게 설치 가능하다. 참고로 모바일의 경우, 브라우저에 접속하여 브라우저 설정에서 홈페이지를 바꾸면 새 탭도 함께 변경된다. (혹시나 제 프로젝트를 통해서 들어오신 분들이 계시다면 반말 양해 부탁드립니다...😅) * 앱 설치 - 먼저 크롬 확장스토어에서 New Tab Redir..
<그리디알고리즘> 13305번 주유소 with 파이썬 문제 어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다. 처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시 마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다. 예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고 하자. 원 안에 있는 숫자는..
<구현> 2331번 반복 수열 with 파이썬 문제 다음과 같이 정의된 수열이 있다. D[1] = A D[n] = D[n-1]의 각 자리의 숫자를 P번 곱한 수들의 합 예를 들어 A=57, P=2일 때, 수열 D는 {57, 74(=5^2+7^2=25+49), 65, 61, 37, 58, 89, 145, 42, 20, 4, 16, 37, …}이 된다. 그 뒤에는 앞서 나온 수들(57부터가 아니라 58부터)이 반복된다. 이와 같은 수열을 계속 구하다 보면 언젠가 이와 같은 반복수열이 된다. 이때, 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 구하는 프로그램을 작성하시오. 위의 예에서는 {57, 74, 65, 61}의 네 개의 수가 남게 된다. 입력 첫째 줄에 A(1 ≤ A ≤ 9999), P(1 ≤ P ≤ 5)가 주어진다. 출력 첫째 ..
<리액트 기초> 동적 라우트 매칭 * 동적 라우트 매칭 - 지난 장에서는 라우트를 3개만 사용했으나 이 이상으로 갯수가 늘어나면 너무 방대해지고 관리하기 힘들기 때문에 동적 라우트 매칭을 사용한다. import React from 'react'; import { BrowserRouter, Route, Link} from 'react-router-dom' import GameMatcher from './GameMatcher' const Games = () => { return ( 숫자야구 가위바위보 로또 게임 매쳐 ); }; export default Games; - 이 때에는 새로운 컴포넌트를 만들어서 기존의 라우터들을 관리하게 되고, 여기서는 그것들을 관리하는 하나의 라우트만 작성한다. 이 때 :name 부분을 파라미터 또는 param..
<리액트 기초> 리액트 라우터 * 리액트 라우터 도입 - 리액트 라우터는 하나의 웹사이트에서 마치 여러개의 웹사이트를 이동하는 경험을 제공해준다. - 리액트 라우터를 사용하기 위해서는 먼저 터미널에서 설치를 해야한다. npm i react-router npm i react-router-dom - 실제로 쓰는 건 React-Router-DOM이다. 리액트라우터 돔이 리액트라우터의 일부를 꺼내어 활용한다. * 리액트 라우터 사용 - 기존과 같이 Client.jsx에서 index.html의 root태그에 돔으로 접근하도록 하고, 별도의 Games.jsx 컴포넌트 파일을 만들었다. 여기에 지난 시간까지 만든 게임들의 링크를 넣어서 이동하도록 할 것이다. import React from 'react'; import { BrowserRouter..
<자바스크립트> 구조 분해 할당 * 배열 분해 - 개발을 하다보면 객체나 배열의 원소들을 변수로 받아야 할 상황이 있다. 이 때 유용하게 쓰이는 것이 구조 분해 할당이다. - 배열의 원소가 변수로 각각 할당되는 예시를 보자. let arr = ["Harry", "Yoon"] let [firstName, lastName] = arr; console.log(firstName) // Harry console.log(lastName) // Yoon - 배열의 원소가 각각 firstName과 lastName에 순서대로 할당되었음을 알 수 있다. - 이렇게 하면 배열의 요소를 인덱스로 이용해서 하나하나 할당하는 것보다 훨씬 효율적이다. - 위의 경우 배열 대신 "Harry Yoon".split(' ') 을 넣더라도 동일하게 동작할 것이다. - 배..
<자료구조> 해시 테이블과 트라이 * 해시 테이블 - 연결리스트와 트리구조에서 검색시간이 O(n)과 O(log n)이 걸렸다. 그러나 컴퓨터 공학자들은 이 시간을 더 단축시켜서 O(1)에 가깝게 만들기를 원했다. - 위를 가능하게 해주는 구조 중 하나가 바로 해시 테이블이다. - 해시테이블은 연결리스트를 원소로 가지는 배열이다. - 이름표를 바구니에 담는다고 가정하자. 단순히 바구니 하나에 여러 이름표를 담으면 사람들이 찾는 데 오랜 시간이 걸릴 것이다. - 그렇다면 바구니를 여러개로 한다면 어떨까. 이 때 바구니를 무슨 기준으로 나누는 것이 좋을까. - 이 때의 기준이 해시 함수이다. 이름표이므로 해시함수를 이름의 가장 첫 글자로 시도해보자. 알파벳이라면 총 16개의 포인터들이 생기고, 그 알파벳은 각각 연결리스트를 가리키게 된다. -..
<파이썬> 리스트 컴프리헨션 * 소개 - 기존에 리스트의 원소를 반복작업으로 추가할 때 for문을 사용해서 하나하나 추가했으나, 최근에 문제를 풀며 리스트 컴프리헨션의 필요성을 느꼈다. 반복되는 원소를 넣을 때 리스트 컴프리헨션을 사용하면 한 줄만에 리스트를 초기화 및 제작할 수 있다. - 리스트 컴프리헨션은 쉽게 말해서 [](대괄호) 안에 반복문을 넣어서 쉽게 원소들을 넣는 것을 일컫는다. 추가적으로 조건문도 사용할 수 있다. array = [i for i in range(5)] print(array) # [0, 1, 2, 3, 4] - 기본적으로 위와 같이 사용한다. 가장 앞의 i는 ',' 를 붙여가며 넣을 원소를 의미한다. - 뒤의 반복문은 원소를 어떤식으로 바꿔가며 넣을지를 의미한다. - 가장 쉽게 쓰는 방법은 일단 대괄호를..
<리액트 기초> Context API * 소개 - 지난 장까지 우리는 부모와 자식관계가 다중관계일 때 props를 물려주기 위해서 한단계씩 아래로 물려주었다. 이는 가독성뿐만 아니라 유지보수를 하기도 번거롭다. - 위와 같은 상황에서 더 간편하게 props를 물려주게 도와주는 것이 ContextAPI이다. * 사용 - Form이라는 컴포넌트 파일에 main컴포넌트인 MineSearch에서 dispatch를 넘겨주려고 한다. Form은 다음과 같이 작성되어있다. const Form = () => { //... const onClickBtn = useCallback( (e) => { dispatch({ type: START_GAME, row, cell, mine}) },[row, cell, mine]); return ( 시작 ) }; expor..