본문 바로가기

C++ 토막 지식(19.01.14) - struct, enum Struct 구조체(Structure)은 간단한 변수들의 모음이다. 어떠한 자료형도 구조체에 들어올 수 있으며, 구조체 그 자체나 사용자가 만든 자료형도 들어올 수 있다. 구조체에 들어간 아이템을 구조체의 멤버(member)라고 부른다. 123456789101112131415161718192021222324252627struct part //specify a structure{int modelnumber; //ID number of widgetint partnumber; //ID number of widget partfloat cost; //cost of part}; int main(){ //initialize variablepart part1 = { 6244, 373, 217.55F };part par..
[백준 C++] 1021, 5430번 회전하는 큐, AC 회전하는 큐AC 어제에 이어서 이중 연결 리스트로 문제를 풀어봤다. 이제 어느정도 감이 잡혔다. 이중 연결 리스트를 만들 때 head 와 tail 을 꼭 초기화시켜 줘야한다. 그리고 노드끼리 연결이 잘 되어있는지 확인 또 확인해야한다. 마지막으로 head 와 tail 에는 데이터가 저장되어있지 않으면 데이터를 출력할 때 head 와 tail 의 데이터는 출력하지 않도록 주의 해야한다. 회전하는 큐코드를 작성하기 전에 어떻게 풀지 생각해놓고 풀었고, 그대로 작성하니 맞았다. 노드가 10 개 있을 경우에는 head - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - tail 과 같이 작성했다. 시작할 때 currNode 는 head 이며, currNode 를 기준으로 오른쪽으로 가야..
C++ string 또는 char 배열을 int 타입으로 바꾸는 방법 출처 BOJ 5430 번과 같은 문제를 풀 때 참 곤란한 점이 있는데 입력을 [1,1,2,3,5,8]과 같이 주고, 여기서 숫자를 뽑아내서 사용해야 하는 것이다. 배열에 있는 숫자가 모두 한자리 수라면 간단하게 해결할 수 있지만 이 문제의 경우에는 원소가 1 에서 100 까지의 수이므로 쉽지 않았다. 그래서 이번 기회에 string 또는 char 배열을 int 타입으로 바꾸는 방법을 정리해봤다. 1. stringstreamstringstream 은 숫자로 이루어진 string 을 int 나 float, double 로 바꾸는 쉬운 방법이다. [1,11,2,33,5,100] 에서 숫자만 추출하는 코드를 작성해봤다. 참고로 sstream 을 include 하면 string 을 include 할 필요가 없는 ..
[백준 C++] 10866, 1406번 덱, 에디터 덱에디터 이중 연결리스트를 공부하려고 푼 문제다. 에디터 문제를 먼저 풀었는데 정말이지 죽을 뻔 했다. Node 의 previous Node 와 next Node 를 모두 연결하는 작업이 너무 헷갈리기도 했고, 실수도 많이 할 수 밖에 없는 자료구조인 것 같다. 그래도 에디터 문제를 풀면서 Node 들과 씨름을 하다 보니 좀 익숙해져서 덱 문제는 훨씬 쉽게 풀었다. 덱덱 문제는 사실 STL 에 있는 것을 가져다와서 사용해도 되는데 처음부터 STL 에 길들여지면 안될 것 같아서 직접 구현하려고 마음먹었다. 이중 연결리스트로 구현할 수있다는 말을 듣고 이중 연결 리스트를 공부해보기로 했다. 사실 덱을 위한 이중 연결리스트는 중요한 기능이 빠져 있다. 에디터 문제에서도 나오겠지만 이중 연결리스트는 그 이름 답..
[백준 C++] 2054번 괄호의 값 괄호의 값 한 시간 안에 푸는 연습을 했는데 정신을 차리고 보니 네 시간이 지나 있었다. 전에 괄호로 이루어진 문자열이 올바른 괄호 문자열인지 판단하는 문제가 있었는데 그 문제를 조금 더 심화시킨 문제다. 그 문제에서는 '(' 와 ')' 만 쓰였다면, 이 문제에서는 '(', ')', '[', ']' 가 쓰인다. 또한 괄호의 조합에 따라 계산을 또 해야해서 문제 자체는 재미있었지만 복잡했다. 문제를 풀고 다른 사람의 풀이를 보니 나처럼 푼 사람이 잘 없어서 좀 자세하게 남기고자 한다. 표로 이해하는 게 더 쉬울 것 같다. 표를 보자. 1. 스택을 두 개 선언했다. 하나는 괄호를 쌓는 곳, 나머지 하나는 계산 결과를 담고자 만든 것이다. 두 번째 설명이 좀 애매한데 예를 들어, 예제 입력 1에서 $(()[[..
C++ 토막 지식(19.01.09 - 10) 1. std::endl 은 output 버퍼를 비워주고(flush), '\n'은 그렇지 않다. 버퍼를 자주 비워줘야 한다면 endl 을 쓰고 그렇지 않다면 '\n' 을 사용하면 된다. 버퍼에 대해서는 좀 더 배워서 정리할 예정이다. 2. char 타입의 데이터는 -128 부터 127 까지의 정수를 담을 수 있다. 1 바이트만 차지하기 때문에 숫자를 담기 위한 자료형으로 가끔 사용되기도 하지만, 실제로는 ASCII 문자를 담기 위해 사용한다. ASCII 문자는 문자에 숫자를 매겨 표현하는 것인데 그 범위가 0에서 127까지만 있으면 숫자, 영어 소문자, 대문자, 특수문자가 포함되므로 char 타입에 맞다. 하지만 프로그램에서 -128 부터 127 까지의 수로는 한국어나 중국어, 일본어 등 외국어까지 표현할..
[백준 C++] 6591, 9375번 이항 쇼다운, 패션왕 신혜빈 이항 쇼다운 언뜻 보면 쉬워 보이면서도 수상쩍은 조건이 있다. 입력되는 두 수는 $2^{31}-1$을 넘지 않으며, 정답이 $2^{31}$보다 작은 경우만 입력으로 주어진다고 한다. $2^{31}-1$은 int형 자료형이 가질 수 있는 최대치이다. int 자료형을 쓰도록 유도하는 함정이라고 생각한다. 하지만 계산 중에 나오는 값이 int 자료형의 범위를 넘을 수 있으며, 이런 경우는 오버플로우 되므로 틀린다고 나올 것이다. 그것만 빼고는 따로 주의할 점이 없다. 123456789101112131415161718#include using namespace std;typedef long long ll;int main() { int n, k; while (1) { cin >> n >> k; if (n == 0..
[백준 C++] 11050번, 11051번, 11401번 이항계수 1, 2, 3 이항 계수 1이항 계수 2이항 계수 3 비록 문과생이지만 나름 수학에 자신있던 편이었어서 쉽게 풀 줄 알았다가 이틀동안 개고생을 했다. 페르마의 소정리, 확장 유클리드 알고리즘, 나머지 연산 등등... 아는 걸 찾는게 빠를 정도로 다 몰랐다. 이번 기회에 이항 계수 문제를 푸는 몇가지 알고리즘을 정리해야겠다는 생각을 했다. 이항 계수는 고등학교 수학 과정에서, 그리고 대학교 통계 수업에서 배웠던 걸로 기억한다. 이항 계수란 n 개의 원소에서 r 개를 뽑아내는 방법의 수를 의미한다. 보통 nCr 의 형태를 띄고 있으며, 계산을 할 때는 다음과 같이 했던 것으로 기억한다. $$\binom{n}{r} = \left( \frac{n!}{r!(n - r)!} \right)$$ 1. 이항 계수 1 이항계수 1은 다..