charles098의 등록된 링크

 charles098로 등록된 네이버 블로그 포스트 수는 133건입니다.

백준 3190번 - 뱀 [내부링크]

문제 링크 https://www.acmicpc.net/problem/3190 우선 전체 코드는 아래와 같습니다 enum class를 사용해...

백준 14499번 - 주사위 굴리기 [내부링크]

https://www.acmicpc.net/problem/14499 전체 코드는 아래와 같습니다. 설명은 코드 아래에 있습니다. 이 ...

백준 1699번 - 제곱수의 합 [내부링크]

https://www.acmicpc.net/problem/1699 설명은 아래에 있습니다. 수학적 사고능력이 정말 중요한 문제입니...

객체지향 vs 절차지향 [내부링크]

수많은 프로그래밍 언어들... 프로그래밍 언어는 종류가 왜 이렇게 많을까요? 전 프로그래밍 공부를 처음 ...

라이브러리 vs 프레임워크 [내부링크]

[1] 라이브러리 라이브러리는 누군가 이미 만들어 놓은 '도구'를 쓰는 것입니다. 이 도구라는 단...

깃과 깃허브 [내부링크]

프로그래밍을 공부하셨다면 '깃허브'라는 단어를 한 번쯤은 들어보셨을 겁니다. 하지만 '깃...

Git의 3가지 작업 영역 [내부링크]

Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작합니다. 각 적업 영역의 이름은 1. working di...

파일의 상태(status) [내부링크]

Git으로 관리되는 파일은 일종의 '상태'라는 걸 가집니다. 크게는 Untracked 상태와 Tracked ...

GitHub에 파일 옮기기 [내부링크]

GitHub는 '원격 저장소'입니다. 즉, 내 컴퓨터에서 작업하던 작업물을 저장하는 공간입니다. ...

다른 사람에게 git push 권한 부여 [내부링크]

로컬 레포지터리 내용을 리모트 레포지터리에도 반영하려면 git push를 해줘야한다고 했습니다. 그런데 모...

커밋 파헤치기1- 커밋 해보기 [내부링크]

이번 시간에서는 커밋에 대해 다뤄보겠습니다. 커밋은 저장과 같습니다. 커밋을 하지 않으면 버전 저장이 ...

백준 1260번 - DFS와 BFS [내부링크]

https://www.acmicpc.net/problem/1260 설명은 아래에 있습니다. 음.. 사실 설명할게 별로 없습니다. DF...

백준 2178번 - 미로탐색 [내부링크]

https://www.acmicpc.net/problem/2178 설명은 코드 아래에 있습니다. 저는 dfs로 문제를 풀었습니다. 이 ...

백준 2606번 - 바이러스 [내부링크]

https://www.acmicpc.net/problem/2606 bfs를 쓰면 굉장히 쉽게 풀리는 문제였습니다. 추가적인 설명은 하...

커밋 파헤치기2 - 이전 커밋으로 돌아가기(reset) [내부링크]

커밋은 연결 리스트 형식으로 저장되어 있습니다. git log로 커밋 이력들을 살펴보면 가장 최신 커밋에 &#x...

branch 소개 [내부링크]

길동씨는 헬스 어플(?)을 만들고 있습니다. 처음에는 아무 생각 없이 만들었는데 만들다보니 초급자, 중급...

branch merge 해보기 [내부링크]

branch A, B에서 서로 다른 작업을 하고 있습니다. 그런데 A에 있는 기능이 B에도 필요하게 되었습니다...

Remote repository의 브랜치 [내부링크]

remote repository의 마스터 브랜치를 보려면 깃허브에 들어가서 보면 되겠죠? 하지만 제 컴퓨터에서도 확...

HEAD와 branch의 관계 [내부링크]

사실 HEAD와 branch는 포인터입니다. 포인터는 무엇을 가리키는 것을 말합니다. 이전에 HEAD를 설...

reset vs checkout [내부링크]

결론부터 말하자면 reset은 브랜치의 이동이고 checkout은 해드의 이동입니다. [1] reset reset은 브랜치의...

merge 완전정복 [내부링크]

이번 시간에는 머지(merge)를 자세히 다뤄보겠습니다. 두 브랜치를 머지하면 머지 커밋이 생성됩니다. 하지...

git pull시 주의점 [내부링크]

만약에 로컬 레포지터리에서 푸시를 해주고 다음 푸시를 해주기 전에 리모트 레포지터리에 변화 생기면 어...

누가 기록했는지 확인하기 [내부링크]

이번 글은 아주 짧습니다. 협업을 하다가 특정 코드를 누가 작성했는지 알고싶을때가 있습니다. 이럴때 git...

remote repository에 올라간 커밋 취소하기 [내부링크]

제목이 조금 이상하게 느껴지셨을 수도 있습니다. 커밋을 취소하려면 리셋을 쓰면 되지 않을까요? 반은 맞...

작업 내용 임시 저장하기 - stash [내부링크]

마스터 브랜치에서 작업을 하다가 아직 커밋을 하지 않았는데 급하게 다른 브랜치로 가야할 일이 생길 수 ...

명령어 정리 [내부링크]

$ git init : 현재 디렉터리를 워킹디렉터리로 지정, 레포지터리 생성 $ git config user.name '이름&...

백준 2667번 - 단지번호붙이기 [내부링크]

https://www.acmicpc.net/problem/2667 메인 함수에서 map[0][0]부터 차례대로 탐색하면서 아직 방문하지 ...

백준 7569번 - 토마토 [내부링크]

https://www.acmicpc.net/problem/7569 사실 난이도는 그렇게 높지 않지만 실수할 수 있는 부분이 굉장히 ...

백준 14719번 - 빗물 [내부링크]

https://www.acmicpc.net/problem/14719 각 인덱스에서 채워지는 빗물의 양을 구해야합니다. 그런데 첫 번...

백준 1463번 - 1로 만들기 [내부링크]

https://www.acmicpc.net/problem/1463 문제에서 가능한 연산은 세 가지입니다. 1.N이 3으로 나누어 떨어...

백준 1697번 - 숨바꼭질 [내부링크]

https://www.acmicpc.net/problem/1697 많이 나오는 유형인데 정답률이 되게 낮아서 당황한 문제였습니다. ...

백준 5639번 - 이진 검색 트리 [내부링크]

https://www.acmicpc.net/problem/5639 전위 순회 순서대로 이진 트리에 삽입시켜주면 트리가 완성됩니다. ...

백준 1107번 - 리모컨 [내부링크]

https://www.acmicpc.net/problem/1107 푸는데 오래 걸렸습니다ㅠㅠ 처음에는 무슨 규칙이 있을줄 알았는데...

문자열 포멧팅, 난수 생성, input [내부링크]

매번 C++로만 코딩을 해서 제가 까먹은 부분들을 다뤄보려고 합니다. [1] 문자열 포멧팅 %d => ...

list, dictionary 정리 [내부링크]

1. List [1] 인덱싱과 슬라이싱 list[a:b] 인덱스 a부터 인덱스 b-1까지의 원소 읽는다 list[a:] 인덱스 a...

passed by assignment [내부링크]

C++ 을 배울때 call by value와 call by reference를 이해하느라 고생했던 기억이 나네요. 처음 이 개념을...

파일 입출력 [내부링크]

파일을 읽고 쓰고 이어쓰는 방법에 대해 알아보겠습니다. [1] 파일 쓰기 위와 같이 입력하면 'new_fil...

인스턴스와 클래스 [내부링크]

이번 시간에는 인스턴수 변수와 인스턴스 매소드, 그리고 클래스 변수와 클래스 매소드에 대해서 다뤄보겠...

데코레이터 [내부링크]

데코레이터의 개념 자체는 간단하지만 이를 깊이 있게 이해하려면 클로저, 일급 인자, 가변 인자, 인자 풀...

여러가지 꿀팁 [내부링크]

1. min, max 함수 2. sum함수 리스트, 튜플, 사전의 모든 요소의 합을 반환해준다. 사전 같은 경우 key의 ...

백준 2579번 - 계단오르기 [내부링크]

https://www.acmicpc.net/problem/2579 우선 두 개의 배열을 생성합니다. dp배열에는 누적 점수를 저장하고...

파이썬의 캡슐화 [내부링크]

파이썬에서는 캡슐화 기능을 따로 제공하지 않습니다. 반면에 java나 C++같은 경우 클래스 내부의 private...

상속과 추상클래스 [내부링크]

클래스가 집합 관계에 있다면 상속을 쓰는 것이 좋습니다. 예를 들어 삼각형, 직사각형, 정사각형, 마름모 ...

[HTML] 태그 정리 [내부링크]

https://www.advancedwebranking.com/html/ 위 사이트에 들어가면 아래와 같이 자주 사용하는 html tag를 ...

[CSS] 스타일 적용 방법 세 가지 [내부링크]

css 스타일을 적용하는 세 가지 방법을 소개하겠다. 어느 방법을 써도 상관없겠지만 일반적으로 세 번째 방...

간단한 여행 사이트 만들어보기 [내부링크]

html/css 간단한 실습. 코드잇을 참고했고 문제가 되면 바로 지우겠다. 하지만 어차피 나 말고 볼 사람이 ...

[CSS] Box Model 정리 [내부링크]

p, div, span 태그 모두 박스 모델이다. 박스 모델은 padding, border, margin을 갖는데 그림으로 보면 아...

로그인 페이지 [내부링크]

로그인 페이지 만들기 실습이다. 아직까지 크게 어려운건 없다. input 태그를 처음 써봤다. input 태그에 ...

코딩의 민족 [내부링크]

코딩의 민족 실습이다. 코드잇을 참고했으며 문제 발생시 삭제하도록 하겠다. 우선 만들고자 하는 웹의 형...

선택자 [내부링크]

선택자는 html의 어떤 태그를 선택할건지를 지칭하는 것이다. 이때까지 계속 써왔던 class가 대표적인 예라...

Display, vertical-align으로 세로 정렬 [내부링크]

Display는 HTML 요소의 레이아웃을 결정하는 속성 중 하나다. 모든 요소는 딱 하나의 display 값을 가...

이미지 링크 실습 [내부링크]

이런 웹페이지를 만들어보는 실습이다. 각 이미지를 클릭하면 해당 사이트로 이동해야 한다. 가로 세로 정...

포지셔닝 [내부링크]

CSS 포지셔닝으로 relative, absolute, fixed를 알아보겠다. 코드잇을 참고했으며 문제가 되면 바로 삭...

Float [내부링크]

CSS의 float 속성에 대해 다뤄보자. Float는 '둥둥 뜨다'라는 의미이다. CSS 속성도 이 ...

정렬 - 가장 큰 수 [내부링크]

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. ...

탐욕법 - 섬 연결하기 [내부링크]

문제 설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통...

합집합 찾기(Union-Find) [내부링크]

합집합 찾기는 그래프의 연결 유무를 판별할 때 쓰이는 알고리즘이다. 세 가지 함수만 구현하면 된다. 1. g...

최소비용신장트리 - kruskal 알고리즘 [내부링크]

최소비용신장트리는 순환하지 않는 최소 비용의 경로를 의미한다. kruskal 알고리즘은 그리디 알고리즘이며...

탐욕법 - 단속카메라 [내부링크]

문제 설명 고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카...

dfs/bfs 네트워크 [내부링크]

문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, ...

dfs/bfs 단어 변환 [내부링크]

문제 설명 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 beg...

dfs/bfs 여행경로 [내부링크]

문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 ICN 공항에서 출발합니다. ...

이분탐색 - 입국심사 [내부링크]

문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하...

이분탐색 - 징검다리 [내부링크]

문제 설명 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여...

큐/스택 - 다리를 지나는 트럭 [내부링크]

문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다...

큐/스택 - 기능개발 [내부링크]

문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 ...

큐/스택 - 프린터 [내부링크]

문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중...

dp - 정수 삼각형 [내부링크]

문제 설명 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를...

dp - 등굣길 [내부링크]

문제 설명 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합...

자바스크립트 기본 [내부링크]

파이썬과 많은 부분 비슷하다. 파이썬이라 생각하고 써도 무방하다. === vs =&#x3...

프로퍼티와 스타일 다루기 [내부링크]

id로 태그 선택하기 document.getElementById('idName'); class로 태그 선택하기 document.g...

이벤트 다루기 [내부링크]

이벤트 헨들링 1) 첫 번째 방법 const btn = document.querySelector('#myBtn'); btn.on...

자바스크립트 기본2 [내부링크]

AND와 OR의 연산 방식 console.log('a' && 'b'); 왼쪽값이 true면 오른...

함수의 다양한 선언 방식 [내부링크]

기본 형태 function sayHelloWorld(){  console.log('Hello World!'); }  변수에 할당해서 사...

모듈 스코프 [내부링크]

파이썬에서 import 하듯이 자바스크립트에서도 똑같이 할 수 있다. 자바스크립트에서 모듈 문법은 export와...

Class [내부링크]

객체 생성 파이썬과 유사한 형태다. constructor가 생성자에 해당하고, 새로운 객체를 생성하려면 new를 사...

콜백 함수와 promise 객체, async/await [내부링크]

1. 콜백함수 fetch 함수는 콜백함수로 서버에 request를 보내고 response를 받는 함수다. 그렇다면… 콜백 ...

콜백 함수2 [내부링크]

콜백 함수에 대한 이해가 부족한 것 같아 보충학습을 했다. 콜백 함수는 함수의 매개변수로 들어가는 함수...

require, export 초간단 정리 [내부링크]

1. 공식 문서에 따르면 exports는 module.exports의 shortcut일 뿐이며 항상 module.exports를 참조하고 있...

포스팅을 시작하며 [내부링크]

서버 공부를 하면서 HTTP에 대한 이해가 부족하다는 느낌을 받았다. 그래서 HTTP 공부를 조금 더 ...

1197번 - 최소 스패닝 트리(골드 4티어) [내부링크]

https://www.acmicpc.net/problem/1197 문제 제목에서 친절하게 어떤 문제인지 알려주고 있다. 나는 크루스...

다익스트라(Dijkstra) [내부링크]

1. 다익스트라의 구성 최소 거리를 구할때 사용하는 대표적인 알고리즘 '다익스트라'에 대해 알아보자. 다익스트라 알고리즘은 시작점으로부터 모든 노드까지의 최소거리를 구해준다. 다익스트라를 구현하기 위해서는 비용 배열, 방문 노드 배열, 시작점~각 노드까지의 비용 배열이 필요하다. 다익스트라에서 노드간의 연결은 wiehgt의 값으로 판단한다. 특정 값이 있으면 연결되어 있다는 뜻이고, 무한값(INF)이면 연결되지 않았다는 뜻이다. 실제로 무한 값은 아니고 자료형의 최대값으로 보는 게 적절하다. 노드 간의 방향성도 표현할 수 있다. 단방향, 양방향을 아래와 같이 표현할 수 있다. 2. 다익스트라 알고리즘 직접 해보기 이.......

1700번 - 멀티탭 스케줄링(골드 2티어) [내부링크]

https://www.acmicpc.net/problem/1700 문제를 읽고 'DFS로 풀면 되겠구나'라고 생각해서 무지성 코딩을 했는데 시간 초과가 났다. 반례들은 다 통과하기 때문에 정답을 도출하는 것에는 문제가 없는 코드라고 생각한다. 다만 모든 경우의 수를 따지기 때문에 비효율적일 뿐... 우선 버리기는 아까우니깐 DFS 코드를 살펴보자. 알고리즘은 아래와 같다. (정답 코드는 아래쪽에 있음) 이제 정답 코드를 살펴보자. 알고리즘은 정말 간단하지만 생각하기가 꽤나 까다로운 문제였던 거 같다. 방법이 떠오르면 풀만한 문제지만 그렇지 않으면 오래 걸리는 문제.. 아래의 규칙만 따르면 된다.

1806번 - 부분합(골드 4티어) [내부링크]

https://www.acmicpc.net/problem/1806 이 문제를 읽자마자 '그냥 이중 for문을 돌리면 되겠구나'라고 생각했다. 그러나 제한 시간 0.5초를 보고 시간 초과가 날 것이라 생각했다. 아니나 다를까, 이중 for문으로 짜니깐 시간 초과가 났다. O(n)의 시간 복잡도로 해결해야 하는 문제다. 투 포인터를 아는지 모르는지에 대한 문제라고 생각한다. 이 문제의 핵심은 '연속'에 있다. 연속합을 구하는 것이기 때문에 중복되는 부분이 존재한다. 말로 하면 헷갈리니깐 그림으로 보자. 위 그림에서 빨간색과 파란색의 연속된 부분합에서 형광색 부분이 중복됨을 알 수 있다. 이 사실을 잘 기억하자. 이제 투 포인터의 알고리즘을 살.......

1916번 - 최소비용 구하기 [내부링크]

https://www.acmicpc.net/problem/1916 모든 비용이 0 이상이고, 최소비용을 구하기 때문에 다익스트라로 해결할 수 있다. 알면 쉽고, 모르면 어려운 문제라고 생각한다. 다익스트라의 구현 방법은 세 가지가 있는데, 나는 가장 비효율적인 방법으로 풀었다. 시간복잡도는 O(N^2)다. 가장 비효율적인 방법으로 푼 이유는 다른 두 방법을 몰랐기 때문이다. 다익스트라에 대한 설명은 알고리즘 파트에서 볼 수 있다. 시간 복잡도가 O(nlogn)인 방법도 정리해놨다.

2581번 - 소수(실버 4티어) [내부링크]

https://www.acmicpc.net/problem/2581 소수 판별 함수 isprime()을 만들어주고 소수면 최소값 초기화, sum에 값을 더해준다. 최소값이 10000으로 변화 없으면 소수가 없다는 뜻이므로 -1을 반환해주고 그 외에는 sum, min을 차례대로 출력해준다.

프로세스의 개념, 인터럽트 [내부링크]

프로세스는 간단하게 '실행 중인 프로그램'으로 정의할 수 있다. '실행중'이라는 것은 해당 프로그램이 메모리 위에 있다는 것을 뜻한다. 프로그램은 컴퓨터 상에 설치된 'exe' 파일이라고 생각하자. exe파일은 실행파일이라고 하는데 이는 단순히 코드일 뿐이다. exe파일을 클릭하면 필요한 메모리 공간을 할당받는데, 이를 프로세스라고 한다. 하나의 프로그램이 여러개 실행되면 프로세스 또한 여러개가 되는 것이다. 그림으로 나타내면 아래와 같다. OS가 프로세스에게 할당하는 메모리는 구역마다 이름이 정해져 있다. 각 구역의 이름은 Text, Data, Stack, Heap이고, 저장되는 데이터 종류는 아래와 같다. -.......

Dual-Mode Operation(커널 모드, 사용자 모드) [내부링크]

메인 메모리는 커널 영역과 사용자 영역으로 구분된다. 이 둘은 같은 공간을 공유하고 있으므로 자칫하면 사용자 영역이 커널 영역을 침범할 수 있다. 이러한 침범 문제를 방지하기 위해 하드웨어의 도움이 필요하다. CPU에는 Mode bit라는 것이 존재한다. Mode bit 값에 따라 커널 모드와 사용자 모드로 구분되는데, 커널 모드는 모든 메모리에 접근 가능하지만 사용자 모드는 오직 사용자 영역에만 접근 불가능하다. 하드웨어적으로 아예 분리를 시켜놨기 때문에 사용자 영역이 커널 영역을 침범하는 일은 없다. 한편, 사용자 모드에서는 실행 가능한 명령이 매우 한정적이다. 컴퓨터를 할때 대부분이 커널 모드로 동작한다고 봐도 무방하다. 그.......

14888번 - 연산자 끼워넣기(실버 1티어) [내부링크]

https://www.acmicpc.net/problem/14888 내 풀이가 좋은 풀이는 아닌 것 같다. 그래도 우선 풀어야 하기 때문에... 생각나는대로 풀었다. 가능한 연산자 조합을 구하는 문제이므로 next_permutation을 썼다. 연산자 종류를 operators라는 벡터에 삽입한 후에, 연산자의 모든 조합으로 계산을 해주고 각각의 경우에 최대값과 최소값을 초기화해줬다. 다른 방법으로 DFS로 푸는 방법이 있다. 원리는 완전하게 동일한데 재귀 함수를 쓰기 때문에 코드가 짧아진다는 점... DFS 방법은 아래쪽에 있다

Next Permutation, Prev Permutation 파헤치기 [내부링크]

1. Next Permutation 알고리즘 문제를 풀다 보면 <algorithm> 라이브러리의 next_permutation 함수를 쓸 일이 많다. 문득 이 함수의 원리가 궁금해서 이 글에 정리해보려고 한다. Next permutation의 기본 원리는 오름차순을 내림차순으로 변경하는 것이다. 변경하는 과정에서 모든 가능한 조합이 나오게 된다. 단, 수열은 사전에 오름차순 정렬되어 있어야 한다. Next_permutation의 과정을 살펴보면 아래와 같다. Next Permutation 과정 1. find max(k), a[k] < a[k+1] 2. find max(m), a[k] < a[m] && k < m 3. swap(a[k], a[m]) 4. reverse(a[k+1:]) [1, 2, 3, 4, 5]를 수동으로 한 예시다. 이런식으로 계속 반복하면.......

1935번 - 후위 표기식2(실버 3티어) [내부링크]

https://www.acmicpc.net/problem/1935 후위 표기식의 계산법을 알기만 하면 간단하게 풀 수 있는 문제다. 하지만 나는 원리를 잘 몰랐기 때문에 꽤나 고민했다. 정답을 보고 푼 것은 아니지만 알고리즘에 대한 선행 학습을 하고난 뒤에 풀어서 정답을 보고 푼 것 같은 느낌이다. 후위 표기식을 계산하기 위해서는 스택이 필요하다. 그리고 아래 두 가지 규칙만 지켜주면 된다. 1. 피연산자면 스택에 push 2. 연산자면 스택에서 두 개 pop해서 연산 후 결과값 push 아주 간단하다. 123*+45/-를 계산하는 예시를 살펴보자. 단, 스택에서 꺼낼 때 계산 순서가 (아래쪽) + (위쪽) 임을 주의하자. 위 두 가지 규칙 그대로 코드로 구현하면 아래와 같.......

14719번 - 빗물(골드 5티어) [내부링크]

https://www.acmicpc.net/problem/14719 아이디어만 떠오르면 굉장히 쉬운 문제다. 다행히도 문제를 읽고 생각나는대로 알고리즘을 짜봤는데 잘 맞아서 빨리 풀 수 있었다. 아이디어는 아래와 같다. 모든 칸에 대해 '흰색'이면 그 칸을 기준으로 같은 행에 좌우로 검은색 칸이 있으면 그 칸은 빗물이 고이는 칸이다. 사실 이게 끝이다. 더 설명할게 없다. 나는 아래와 같은 순서로 코드를 구현했다. 1. 2차원 배열을 0으로 초기화. 즉 0이 흰칸. 2. 검은칸을 1로 초기화. 즉 1이 검은칸. 3. 모든 칸에 대해 흰칸이면 좌우에 검은칸이 있는지 검사하고 있으면 정답에 1 더해준다. 4. 정답 출력

순열과 조합 DFS로 구현해보기 [내부링크]

코딩 테스트를 준비하면서 느낀건데 최종 보스는 DFS와 dp인 것 같다. 생각하기는 어려운데 굉장히 직관적이랄까.. 백준 문제를 풀다가 조합이 꼭 필요한 문제가 있었는데 조합을 구현할 줄 몰라서 이 글을 쓰게 됐다. 조합을 먼저 구현한 뒤에 순열을 구현해 보겠다. 둘 다 재귀를 이용한 DFS로 구현한다. 1. 조합 그냥 직관적으로 생각해보자. 크기가 5인 배열 {4, 2, 1, 3, 5}에서 3개를 뽑는 5_C_3의 경우를 예로 들어보자. 첫번째 숫자부터 차례대로 뽑았다가 3개를 다 뽑으면 다시 되돌아오고 다음 숫자를 뽑을 것이다. 말로 하면 헷갈리니 그림으로 보자. 5가지 경우의 수까지를 살펴보면 아래와 같다. 우선 조합에서는 각 경우의 수 마다.......

1062번 - 가르침(골드 5티어) [내부링크]

https://www.acmicpc.net/problem/1062 조합을 구현할 수 있는지 없는지에 대한 문제였다. 조합을 구현할 줄 알면 나름 수월하게 풀 수 있다. 하지만 나는 조합을 구현할 줄 몰랐기 때문에 조합을 구현하는 것부터 배웠다. '알고리즘' 파트에 조합, 중복조합, 순열, 중복순열에 대한 글을 정리해놨다. 문제를 읽고 이해하기까지 5분 정도 걸린 것 같다. 이 문제에서 주의할 점은 모든 단어가 'anta'로 시작하고 'tica'로 끝난다는 점이다. 따라서 a, n, t, i, c 다섯 글자가 K 안에 항상 포함된다. 즉, K가 5보다 작으면 정답은 항상 0을 출력, K가 26이면 모든 글자를 배운 경우이므로 N을 출력하면 된다. 원리는.......

1918번 - 후위 표기식 [내부링크]

https://www.acmicpc.net/problem/1918 후위 표기식에 대한 설명은 '알고리즘' 파트에서 '중위 표기식을 후위 표기식으로 변환 후 계산'글에 정리해놨다.

중위 표기식을 후기 표기식으로 변환 후 계산 [내부링크]

중위 표기식은 연산자가 중간에 위치하는 표기식으로 우리가 늘 쓰는 표기식이다. 후위 표기식은 연산자가 뒤에 있는 표기식으로 컴퓨터의 연산 방식이다. 컴퓨터는 사람이 입력한 중위 표기식을 후위 표기식으로 변환해서 연산을 진행한다고 한다. 중위 표기식 : A * (B + C) 후위 표기식: ABC+* 이번 글에서는 중위 표기식을 후위 표기식으로 변환하는 알고리즘과 후위 표기식을 계산하는 알고리즘을 다룬다. 두 가지 경우 모두 stack 자료구조가 필요하다. 1. 중위 표기식을 후위 표기식으로 변환 알고리즘은 아래와 같다. 이를 그대로 코드로 구현하면 된다. 코드를 보기 전에 먼저 수동으로 직접 해보자. 아래의 식을 위 알고리즘에 따라 후.......

2504번 - 괄호의 값(실버 2티어) [내부링크]

https://www.acmicpc.net/problem/2504 개인적으로 너무 어려운 문제였다. 이틀을 꼬박 고민하다가 그냥 다른 사람의 풀이를 봤다. 알고리즘은 아래와 같다. 입력값의 인덱스 0번째 문자부터 순차적으로 진행된다.

문제 출처 [내부링크]

아래 블로그에서 추천해준 문제들에 대한 문제 풀이. 여기 없는 문제도 몇 개 있다. https://covenant.tistory.com/224

2501번 - 약수 구하기(브론즈 3티어) [내부링크]

https://www.acmicpc.net/problem/2501 벡터를 생성하고 N을1부터 N까지의 수로 나눈 다음 나누어 떨어지는 숫자(약수)를 벡터에 추가해줬다. 벡터에는 약수만 있으므로 K-1번째(인덱스는 0부터 시작하므로) 숫자를 출력해주면 된다. 단, 벡터의 크기가 K보다 작으면 K째 작은 약수가 없으므로 0을 출력해준다.

3460번 - 이진수(브론즈 3티어) [내부링크]

https://www.acmicpc.net/problem/3460 테스트 케이스 T크기의 배열을 만들어준 다음, T의 모든 원소를 이진수로 변환하고 1의 인덱스를 출력해주면 된다. 이진수 변환은 손으로 직접 해본 결과 몫이 0일때까지 계속 나눠주다가 몫이 0이 되면 끝에 1을 붙여주면 된다.

10818번 - 최소, 최대(브론즈 3티어) [내부링크]

https://www.acmicpc.net/problem/10818 숫자를 입력받을때마다 최대, 최소값을 초기화해준다. 최대, 최소값 초기화는 문제의 조건에 따라 각각 최소, 최대값으로 설정한다.

2460번 - 지능형 기차 2(브론즈 3티어) [내부링크]

https://www.acmicpc.net/problem/2460 각 역마다 사람 수를 구하고, 최대값을 따로 저장하면 된다.

10870번 - 피보나치 수 5(브론즈 2티어) [내부링크]

https://www.acmicpc.net/problem/10870 재귀 버전으로 간단하게 풀었다. for문으로도 풀어봤다(주석 참고).

2309번 - 일곱 난쟁이(브론즈 2티어) [내부링크]

https://www.acmicpc.net/problem/2309 모든 난쟁이의 키를 더한 다음 100을 빼준 값을 sum에 저장한다. 두 수의 합이 sum을 만족하는 숫자 두 개를 찾기만 하면 된다.

2609번 - 최대공약수와 최소공배수(실버 5티어) [내부링크]

https://www.acmicpc.net/problem/2609 최대공약수는 유클리드 호제법을 사용하여 쉽게 구할 수 있다. 유클리드 호제법은 아래와 같다. a, b 두 수가 있다. 이때 a는 항상 b보다 커야한다. a % b = c b % c = d c % d = 0 이면 a, b의 최대공약수는 d다. 재귀 함수로 간단하게 구현할 수 있다. 최소공배수는 두 수의 곱에 최대공약수를 나눠주면 된다.

2693번 - N번째 큰 수(실버 5티어) [내부링크]

https://www.acmicpc.net/problem/2693 그냥 정렬해주고 7번째 인덱스 출력해주면 끝이다. 초간단..

1978번 - 소수 찾기(실버 4티어) [내부링크]

https://www.acmicpc.net/problem/1978 소수는 약수가 1과 자기 자신인 수 뿐이다. 소수인지 판별해주는 isprime() 함수를 만들고 입력값이 소수면 정답을 1씩 증가시켜주면 된다.

1292번 - 쉽게 푸는 문제(실버 4티어) [내부링크]

https://www.acmicpc.net/problem/1292 수열의 인덱스(idx)가 A보다 크거나 같으면 ans에 num을 더해주고, idx가 B와 같아지면 멈춰주면 된다.

Course 10 - 문자열, 동적 배열, 정적 배열 [내부링크]

[ 동적 배열 vs 정적 배열 ] 1. 정적 배열 정적 배열은 스택이라는 메모리 영역에 할당된다. 일반적으로 Visual Studio는 스택 크기를 1MB로 설정하기 때문에, 이를 초과하면 스택 오버플로우가 발생하고 운영체제가 프로그램을 종료한다. 즉, 배열의 크기가 1MB를 넘기면 오류가 발생한다. 정적 배열에 대한 메모리는 프로그램이 실행될 때 한 번 할당되며, 프로그램 수명 내내 지속한다. 2. 동적 배열 동적 배열은 힙이라는 메모리 영역에 할당된다. 힙의 메모리 풀은 스택보다 크기 때문에 큰 크기의 배열을 저장할 수 있다. 최신 시스템에서는 힙 크기가 기가바이트 단위가 될 수 있다. 동적 배열은 동적으로 할당해줘야 한다. 동적 할당은 n.......

Course 13 - class(연산자 오버로딩) [내부링크]

*참고* 연산자 오버로딩에서 대입 연산자(=)는 기본적으로 지원한다. 하지만 연산자 정의를 해주지 않으면 얕은 복사를 해준다. 이는 잘못하면 메모리 누수 현상이 발생할 수 있는데, 예시는 아래 글을 참고하면 된다. 할당해제가 필요한 경우 대입 연산자를 정의해주는 것이 좋다. https://blog.hexabrain.net/177

HTTP의 특징 [내부링크]

HTTP는 HyperText Transfer Protocol로 쉽게 말해서 html을 주고 받기 위한 규칙이다. 그러나 이는 옛말이고 지금은 HTTP로 거의 모든 것을 전송한다고 한다. html, 사진, 음성, 영상, 파일, json, xml 등 거의 모든 형태의 데이터가 전송 가능하다. HTTP의 특징은 아래와 같다. 1. 클라이언트 - 서버 구조 클라이언트와 서버는 독립적이라는 뜻이다. HTTP 프로토콜은 '요청'과 '응답'으로 이루어지는데 일반적으로 요청을 보내는 곳은 클라이언트, 응답을 보내는 곳은 서버라고 한다. 2. 무상태 (stateless) stateless란 말 그대로 상태를 저장하지 않는다는 뜻이다. 상태란 클라이언트의 정보라고 할 수 있다. HTTP는 무상.......

HTTP 메소드 [내부링크]

1. GET GET 메소드는 자원 요청 메소드다. HTTP를 통해 식별 가능한 정보를 검색한다고 말할 때, GET 요청을 보낸다고 생각하면 된다. 유의할 점은 쿼리 내용이 URI에 그대로 표현되기 때문에 보안상 문제가 될 수 있다. 캐싱된다는 특징이 있다. 2. POST POST 메소드는 서버에 데이터를 등록하는 메소드다. 서버에 보내지는 데이터 내용은 POST의 body 부분에 있다. 캐싱되지 않는다는 특징이 있다. 참고로 GET과 POST는 가장 많이 쓰이는 메소드로 form 태그에서 많이 호출된다. form 태그 속성 중에 action에는 폼을 전송할 스크립트 파일이 담기고, method에서 HTTP 메소드를 정한다. input 태그의 데이터들이 req.body에 저장된다. 3. PUT, .......

HTTP 상태코드 [내부링크]

상태코드란 클라이언트가 서버에 요청을 보내면 서버에서 그 요청을 어떻게 처리했는지 알려주는 코드다. 상태코드의 종류는 굉장히 많지만 크게 앞지리 숫자로 구분할 수 있다. 앞자리 숫자가 무엇을 의미하는지 알아보고, 대표적인 상태코드를 알아보자. 1xx (Informational): 요청이 수신되어 처리중 2xx (Successful): 요청 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함 1xx 꼴의 상태코드는 거의 사용되지 않으므로 생략한다. 2xx (Successful) 200 OK : 요.......

Course 1 [내부링크]

[ int 와 long의 차이점 ] 위 예제를 보면 int와 long의 크기가 동일하고 표현할 수 있는 값의 범위도 동일한 것을 볼 수 있다. 차이점이 뭘까 찾아봤는데 하드웨어, OS, 컴파일러 모두가 영향을 주는 것 같다. 따라서 뭐라고 특정짓기는 어렵다. 단, 아래와 같은 규칙은 적용된다. short<=int<=long<=double

인터넷 통신 - IP, TCP, UDP [내부링크]

늘 궁금했던 것이 있다. 인터넷 상에서 컴퓨터들은 어떻게 통신할까? 지구 정 반대편에 사는 사람과 인터넷으로 통신할 수 있다는게 늘 신기하다고 생각했었다. 모든 통신은 어떤 규칙을 따른다. 컴퓨터 세계에서는 이 규칙을 ‘프로토콜’이라고 부른다. 컴퓨터 용어에서 뒤에 ‘P’로 끝나는 용어들은 프로토콜의 일종일 가능성이 높다(아님 말고). 인터넷에서 가장 기본적인 프로토콜은 모든 사람들이 흔히 아는 IP(Internet Protocol)이다. 네이밍이 굉장히 정직하고 직관적이다. 모든 컴퓨터에는 고유 IP가 부여된다. 엄밀히 말하면 고유한 공인IP가 부여되는데 공인/사설 IP는 여기서 다루지는 않겠다. IP의 특징은 아래와 같다. - 지정한.......

인터넷 통신 - 포트, 도메인 [내부링크]

포트 모든 컴퓨터는 IP주소를 할당받는다. IP주소는 기숙사 건물이라고 생각하면 된다. 포트는 기숙사 방이다. 기숙사 안에 여러개의 방이 존재하듯이 IP는 수많은 포트를 가진다. 그러니깐 포트 번호는 세부 주소로 생각하면 된다. 애플리케이션을 구분할 때도 포트 번호를 사용한다. 포트 번호는 0 ~ 65535까지 할당 가능하지만 0 ~ 1023은 잘 알려진 포트(well known port number)로 사용하지 않는 것이 좋다. 대표적인 well known port number로는 HTTP(80), HTTPS(443), FTP(20, 21) 등이 있다. HTTP, HTTPS 포트 번호는 워낙 자주 사용해서 생략이 가능하다. 혹시 접속한 도메인이 ‘http’로 시작한다면 맨 뒤에 ‘:80’을 붙여보자. 정상.......