별의 공부 블로그 🧑🏻‍💻

🗒️ CPP (59)

728x90
  1. 2023.02.05 [MacOS] M1 / M2 맥에서 MinGW 설치하는 방법

    M1 / M2 맥에서 MinGW 설치하는 방법 들어가며 애플에서 자체 개발한 M 실리콘 칩은 ARM 아키텍처를 사용하기 때문에 x86_64 용으로 만들어진 MinGW를 설치할 수 없다. M 실리콘 칩이 탑재된 맥에서 터미널을 통해 간단한 명령을 입력하여 MinGW를 설치하는 방법을 알아보자. 방법 터미널에서 아래의 명령들을 하나하나씩 입력해준다. % arch -arm64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" arm64 프로세서용 mingw를 설치하는 명령을 입력한다. % arch -arm64 brew install mingw-w64 헤더를 사용하고자 할 경우 터미널에서..

  2. 2022.12.13 [C++] 3개의 숫자 중에서 최댓값 구하기 (max(a, b, c))

    3개의 숫자 중에서 최댓값 구하기 (max(a, b, c)) 들어가며 @max()@ 함수의 매개변수로 2개의 숫자밖에 넣질 못한다. 따라서 3개 이상의 숫자를 비교하려면 @max(a, max(b, c))@와 같이 사용해야 한다. 하지만 다음과 같이 간단하게 3개의 숫자 중 최댓값을 구하는 커스텀 함수를 작성하여 사용할 수 있다. 방법 int myMax(int a, int b, int c) { return a > b ? (a > c) ? a : c : (b > c) ? b : c; } a > b ? (a > c) ? a : c : (b > c) ? b : c 예제 #include using namespace std; int myMax(int a, int b, int c) { return a > b ? (a..

  3. 2022.11.01 [C++] 벡터 내부의 중복된 문자 제거 방법

    벡터 내부의 중복된 문자 제거 방법 알고리즘 문제를 풀 때, 벡터 내부의 중복된 문자를 제거하고 싶을 때가 있다. 다음과 같이 간단하게 중복되는 문자를 공백(" ")으로 바꿔주고, 출력할 때 공백(" ")이 아닌 문자만 출력하도록 하는 방법을 사용할 수 있다. #include #include using namespace std; int N; string word; vector words; int main() { cin >> N; for (int i = 0; i > word; words.push_back(word); } // 벡터 내의 중복된 단어 제거 for (int i = 0; i < words.size(); i++) { for (int j = i + 1; j < word..

  4. 2022.10.24 [BOJ2566][C++] 최댓값

    문제 과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 예를 들어, 다음과 같이 81개의 수가 주어지면 1열 2열 3열 4열 5열 6열 7열 8열 9열 1행 3 23 85 34 17 74 25 52 65 2행 10 7 39 42 88 52 14 72 63 3행 87 42 18 78 53 45 18 84 53 4행 34 28 64 85 12 16 75 36 55 5행 21 77 45 35 28 75 90 76 1 6행 25 87 65 15 28 11 37 28 74 7행 65 27 75 41 7 89 78 64 39 8행 47 47 70 45 23 65 3 41 44 9행 87 13 82 ..

  5. 2022.08.31 가우스 계산법(Gaussian Calculation)

    가우스 계산법(Gaussian Calculation) 가우스(1777 ~ 1885, Carl Friedrich Gauss) 가우스(1777 ~ 1885, Carl Friedrich Gauss)의 선생님 뷔트너는 수업 시간에 잠시 쉴 생각으로 학생들에게 1부터 100까지 더하는 문제를 냈다. 가우스는 순식간에 5050 이라는 정답을 알아내었다. 가우스의 천재성을 알아본 뷔트너는 그에게 고등학교 수학 교과서를 선물했다고 한다. 독일의 수학자 가우스는 아르키메데스, 뉴턴과 함께 수학의 역사살 가장 위대한 세 명의 수학자 중 한 명이다. 가우스 계산법 연속된 수 또는 규칙적으로 나열되어 있는 수열 등의 합을 쉽게 계산하기 위해서 사용하는 계산법 일반화하면 다음과 같다. 처음 값부터 마지막 값까지의 합 = (처음..

  6. 2022.07.11 [BOJ1152][C++] 단어의 개수

    문제 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 입력 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다. 출력 첫째 줄에 단어의 개수를 출력한다. 예제 입력 1 The Curious Case of Benjamin Button 예제 출력 1 6 예제 입력 2 The first character is a blank 예제 출력 2 6 예제 입력 3 The last charac..

  7. 2022.07.09 [C++] 동적 할당(Dynamic Allocation) 방법 (malloc, calloc, new)

    C++ 에서의 동적 할당(Dynamic Allocation) 방법 동적 할당(Dynamic Allocation) 실행 시간 동안 사용할 메모리 공간을 할당하는 것 동적 메모리 할당을 이용하면 배열의 크기를 가변적으로 생성할 수 있다. 메모리 영역 중 힙(Heap) 영역에 저장된다. 사용자가 원할 때 메모리에 등록시키고, 원할 때 해제시킬 수 있다. 동적 할당한 메모리를 해제하지 않을 경우 메모리 누수가 발생한다. 프로그램을 종료해도 메모리에 계속해서 상주한다. 동적 할당은 C 방식과 C++ 방식으로 나뉜다. C 기반 동적 할당 C 기반 동적 할당 방법으로는 malloc(), calloc() 함수를 이용한 방법이 있다. 동적 할당을 해제할 때는 free() 함수를 사용한다. C++ 기반 동적 할당 C++ ..

  8. 2022.07.09 [C++] 입력 함수 : cin(), getline() (and cin.ignore())

    입력 함수 : cin(), getline() (and cin.ignore()) 들어가며 C++의 입력 함수인 cin()과 getline() 함수에 대해 알아보자. 그리고 입력 버퍼를 비우는데 사용되는 cin.ignore() 함수에 대해 간단히 알아보자. cin() 헤더에 정의되어 있다. 표준 입력 버퍼에서 공백 혹은 개행 문자(\n) 이전 까지의 값만을 받아들인다. >> 연산자를 사용하여 공백이 포함된 문자열을 입력 받을 경우, 공백 전의 문자만 입력된다는 단점이 존재한다. 공백이 포함된 문자열을 입력받으려면 getline() 함수를 사용해야 한다. #include int str; cin >> str; // "My Blog" 입력 cout > val; getline(cin, str); cout

  9. 2022.07.09 [C++] 범위 기반 for 문(Range-based for Statement)

    범위 기반 for 문(Range-based for Statement) 개념 더 간단하고 안전하게 배열 등의 모든 요소를 반복할 수 있다. 범위(Range)를 통해 실행되어야 하는 루프를 생성한다. C++11 부터 사용 가능 구문 attr(optional) for ( init-statement(optional)range-declaration : range-expression ) loop-statement 속성 설명 attr any number of attributes init-statement either (since C++20) ▶ an expression statement (which may be a null statement ";") ▶ a simple declaration, typically a d..

  10. 2022.07.07 [C++] 자료형(Data Type)

    C++의 자료형(Data Type) C++ 의 자료형에는 기본형, 문자형, 정수형, 실수형(부동 소수점형)이 있다. 기본형 void 문자형 (singed) char unsigned char wchar_t 정수형 bool (signed) short (int) unsigned short (int) (signed) int unsigned int (signed) long (int) unsigned long (int) __int8 __int16 __int32 __int64 실수형(부동 소수점형) float (long) double 정수 자료형의 크기 및 범위 (LLP64/IL32P64, Windows) 자료형 크기 범위 비고 char signed char 1 Byte 8 Bits -128 ~ 127 unsigne..

  11. 2022.07.07 [C++] 이스케이프 시퀀스(Escape Sequence)

    C++ 이스케이프 시퀀스(Escape Sequence) 이스케이프 시퀀스(Escape Sequence, 확장열)란? 컴퓨터와 주변 기기의 상태를 바꾸는 데에 쓰이는 일련의 문자열로, 제어 시퀀스(Control Sequence)라고도 한다. 일부 제어 시퀀스는 늘 같은 의미를 지니고 있는 특수 문자이다. 이스케이프 시퀀스는 이스케이프 문자를 이용하여 이를 따르는 문자들의 뜻을 바꿀 수 있는데, 여기서 문자들은 데이터가 아닌 실행 명령어로 해석할 수 있다. - Wikipedia 이스케이스 시퀀스의 종류 이스케이프 시퀀스 설명 \a 경고(Alert) \n 줄바꿈(New Line) \t 수평 탭(Horizontal Tab) \v 수직 탭(Vertical Tab) \b 백스페이스(Backspace) \f 폼 피드..

  12. 2022.06.15 [BOJ2480][C++] 주사위 세개

    문제 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게..

  13. 2022.06.15 [BOJ2525][C++] 오븐 시계

    문제 KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진..

  14. 2021.10.31 [C++] 공백을 기준으로 문자열 나누기 (substr() 사용)

    [C++] 공백을 기준으로 문자열 나누기 (substr() 사용) substr() 함수를 사용하여 공백(스페이스)을 기준으로 문자열 나눌 수 있다. 또한 atoi() 함수를 사용하여 string형 숫자를 int형으로 바꿀 수 있다. #include #include using namespace std; int main() { string cmd, cmd1, cmd2; int input; getline(cin, cmd);// getline() 함수를 사용하여 공백을 포함한 문자열 입력 받기 cmd1 = cmd.substr(0, cmd.find(" "));// 공백의 앞에 있는 단어를 cmd1 변수에 저장 cmd2 = cmd.substr(cmd.find(" ") + 1, cmd.length());// 공백의 ..

  15. 2021.10.30 [BOJ2164][C++] 카드2

    문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다. N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로..

  16. 2021.06.27 웰시-포웰 알고리즘(Welsh-Powell Algorithm)

    웰시-포웰 알고리즘(Welsh-Powell Algorithm) 차수(Degree) 가 높은 정점부터 차례대로 그래프 컬러링을 수행하는 방법 다음의 순서를 따름. ① 단계 모든 정점을 차수에 대한 내림차순으로 정렬하고 배열에 저장함. ② 단계 정렬된 배열에서 색상이 지정되지 않은 첫 번째 정점을 선택하고, 이 정점과 연결된 모든 정점을 조사하여 아직 사용되지 않은 색상을 해당 정점에 지정함. 이 색상을 C라고 지칭하겠음. ③ 단계 정렬된 배열에서 색상이 지정되지 않은 정점을 모두 찾고, 만약 이 정점의 이웃이 C 색상을 가지고 있지 않다며 해당 정점에 C 색상을 지정함. ④ 단계 배열에 색상이 지정되지 않은 정점이 남아 있다면 ②단계로 이동함. 남아 있는 정점이 없다면 종료함. 이때까지 정점에 지정된 색상..

  17. 2021.06.25 분할 가능 배낭 문제(Fractional Knapsack Problem)

    분할 가능 배낭 문제(Fractional Knapsack Problem) 0-1 배낭 문제 에서 다음 조건 추가 주어진 물건(O)을 원하는 형태로 얼마든지 분할 할 수 있음. 각 물건의 일부분만을 배낭에 담을 수 있음. 실생활의 예) 상인이 기름, 곡물, 밀가루와 같은 품목을 다룰 경우 각 품목을 원하는 양만큼 덜어내서 배낭에 담을 수 있음. 일반 배낭 문제가 NP-완전 문제 인 것과 달리 분할 가능 문제 는 간단한 솔루션이 존재함. 각 물건을 단위 무게(W)당 가격(V)을 기준으로 정렬함. 그리디 방식 에 따라 단위 무게당 가격이 높은 순서 로 물건을 선택함. 분할 가능 배낭 문제의 예 배낭 용량(T)이 8인 경우에 선택할 수 있는 최선의 물건 조합 코드 #include #include #include..

  18. 2021.06.24 최단 작업 우선 스케줄링(Shortest-Job-First Scheduling)

    최단 작업 우선 스케줄링(Shortest-Job-First Scheduling) 그리디 알고리즘(Greedy Algorithm)으로 해결할 수 있는 문제 중 하나 예 : 은행 창구 하나의 창구에서만 업무를 보고 있음. 대기열에 N명의 사람이 기다리고 있음. 서로 다른 용무로 방문했기 떄문에 일 처리에 필요한 시간은 사람들마다 서로 다름. 대기열에 기다리고 있던 모든 사람이 매우 합리적이어서 평균 대기 시간이 최소화될 수 있도록 대기 순서를 다시 정하는 것 에 동의하였음. 그래서 이제 대기 순서를 어떻게 바꿔야 하는지를 결정해야 함. 항목 Pi : i번째 사람 Ai : Pi의 일 처리 시간 Wi : Pi가 기다려야 하는 시간 창구에서 가까운 사람이 먼저 일을 처리할 수 있으므로 첫 번째 사람 P0의 대기 ..

  19. 2021.06.18 [BOJ21964][C++] 선린인터넷고등학교 교가

    문제 드높은 남산 위에 우뚝 선 송백은 흰 눈빛에 푸르고 옛부터 흘러가는 한가람 장 할 손 우리 학원 이룩한 굳세고 다함 없는 거룩한 뜻이 백이십년 빛난 역사 자랑이로세 비바람 몰아쳐도 나가자 공들여 쌓은 탑은 빛난다 울려라 삼천리에 힘차게 세워라 반석 위에 선린의터를 선린인터넷고등학교 학생들은 이미 잘 알고 있겠지만, 학교 교가를 부를 때는 마지막 5글자인 "선린의터를" 부분만 크고 우렁차게 불러야 한다. 정휘는 여기에 영감을 받아, 문자열이 주어지면 마지막 5글자만 우렁차게 읽으려고 한다. 공백이 없는 문자열이 주어지면 마지막 5글자만 출력하는 프로그램을 작성해보자. 입력 첫 번째 줄에 문자열의 길이 N이 주어진다. 두 번째 줄에는 N글자로 이루어진 문자열 S가 주어진다. 출력 S의 마지막 5글자를 ..

  20. 2021.05.28 [C++] 블룸 필터(Bloom Filter)

    블룸 필터(Bloom Filter) 해시 테이블에 비해 공간 효율이 매우 높은 방법 결정적(Deterministic) 솔루션 대신 부정확한 결과를 얻을 수 있음. 거짓-부정(Fals Negative) 이 없다는 것은 보장하지만, 거짓-긍정(False Positive) 은 나올 수 있음. 특정 원소가 존재한다는 긍정적인 답변을 받을 경우, 이 원소는 실제로 있을 수도 있고 없을 수도 있음. 그러나 특정 원소가 존재하지 않는다는 부정적인 답변을 받았다면, 이 원소는 확실히 없음. 뻐꾸기 해싱과 마찬가지로 블룸 필터도 여러 개의 해시 함수를 사용함. 보통 2개의 해시 함수는 충분한 정확도를 기대하기 어렵기 때문에 3개 이상을 사용해야 함. 블룸 필터는 실제 값을 저장하지는 않음. 대신 특정 값이 있는지 없는지..

  21. 2021.05.28 [C++] STL로 해시 테이블(Hash Table) 만들기 (std::unordered_map, std::unordered_set)

    STL로 해시 테이블(Hash Table) 만들기 서론 C++의 STL을 이용하여 해시 테이블(Hash Table)을 구현할 수 있다. std::unordered_map과 std::unordered_set을 이용한다. 이 방법으로 해시 테이블을 구현할 경우 원소의 순서가 보장되지 않으며, 원소의 순서를 보장하도록 만들기 위해서는 std::unordered_multimap 또는 std::unordered_multiset을 이용하여 구현하면 된다. 코드 #include #include #include void print(const std::unordered_set& container) { for (const auto& element : container) { std::cout

  22. 2021.05.28 [C++] std::unordered_map 에서 [] 연산자

    std::unordered_map 에서 [] 연산자 키와 값의 쌍을 저장한 후, [] 연산자와 키를 이용하여 값을 받아올 수 있음. [] 연산자는 참조 를 반환하므로 이를 이용하여 저장된 값을 변경 할 수도 있음. 만약 해당 키가 없다면 해당 위치에 기본값을 추가하여 반환함. 예제 코드 #include #include void print(const std::unordered_map& container) { for (const auto& element : container) { std::cout

  23. 2021.05.20 [C++] 체이닝(Chaining)을 이용한 해시 테이블(Hash Table) 구현

    체이닝(Chaining)을 이용한 해시 테이블(Hash Table) 구현 체이닝(Chaining) 해시 테이블에 두 값을 모두 저장할 수 있는 여러 방법 중 하나 해시 테이블의 특정 위치에서 하나의 키 를 저장하는 것이 아니라 하나의 연결 리스트 를 저장함. 새로 삽입된 키에 의해 충돌이 발생하면 리스트의 맨 뒤에 새로운 키를 추가함. 따라서 다수의 원소를 원하는 만큼 저장할 수 있음. 벡터 대신 연결 리스트를 사용하는 이유? 특정 위치의 원소를 빠르게 삭제하기 위함. 코드 #include #include #include #include using uint = unsigned int; class hash_map { std::vector data; public: hash_map(size_t n) { dat..

  24. 2021.05.19 [C++] 인접 리스트를 이용하여 그래프 구현하기

    인접 리스트를 이용하여 그래프 구현하기 서론 인접 리스트(Adjacent List)를 이용하여 그래프(Graph)를 구현해보자. 코드 #include #include #include enum class city : int { MOSCOW, LONDON, SEOUL, SEATTLE, DUBAI, SYDNEY }; std::ostream& operator

  25. 2021.05.19 [C++] 인접 행렬을 이용하여 그래프 구현하기

    인접 행렬을 이용하여 그래프 구현하기 서론 인접 행렬(Adjacent Matrix)을 이용하여 그래프(Graph)를 구현해보자. 코드 #include #include enum class city : int { MOSCOW, LONDON, SEOUL, SEATTLE, DUBAI, SYDNEY }; std::ostream& operator

  26. 2021.05.15 [C++] 조직 구조도 만들기 (이진 트리 이용)

    조직 구조도 만들기 (이진 트리 이용) 서론 트리(Tree) 자료구조를 이용하여 조직 구조도를 만들어보자. 이진 트리(Binary Tree)를 이용하고, 1명의 상사 직원 밑에 2명의 부하 직원을 둘 수 있다고 가정한다. 상사 직원이 없을 경우, 부하 직원을 추가할 수 없다. 코드 #include #include struct node { std::string position; node* first; node* second; }; struct org_tree { node* root; static org_tree create_org_structure(const std::string& pos) { org_tree tree; tree.root = new node {pos, NULL, NULL}; return t..

  27. 2021.05.08 [C++] 다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수

    다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수 반환하는 컨테이너는 모든 인자를 공통 타입으로 변환하여 저장함. 전체 원소를 빠르게 순회할 수 있어야 함. #include #include #include template auto build_array(Args&&... args) -> std::array { using commonType = typename std::common_type::type; return {std::forward((Args&&)args)...}; } int main() { auto data = build_array(1, 0u, 'a', 3.2f, false); for (auto i: data) { std::cout

  28. 2021.04.13 [BOJ5618][C++] 공약수

    시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 3857 1932 1682 59.205% 문제 자연수 n개가 주어진다. 이 자연수의 공약수를 모두 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 2 또는 3이다. 둘째 줄에는 공약수를 구해야 하는 자연수 n개가 주어진다. 모든 자연수는 $10^8$ 이하이다. 출력 입력으로 주어진 n개 수의 공약수를 한 줄에 하나씩 증가하는 순서대로 출력한다. 예제 입력 1 2 75 125 예제 출력 1 1 5 25 출처 Olympiad > 일본정보올림피아드 > 일본정보올림피아드 예선 > JOI 2006 모의고사 1 2번 문제를 번역한 사람: baekjoon 데이터를 추가한 사람: njw1204 알고리즘 분류 수학 코드 1 2..

  29. 2021.02.17 [C++] 정수를 입력 받아 각 자릿수의 합 구하기

    정수를 입력 받아 각 자릿수의 합 구하기 정수를 입력 받아 각 자릿수의 합을 구하려면 다음과 같이 사용하면 된다. ■ 알고리즘 1. 입력 받은 수(num)와 10을 나머지 연산을 수행한 후, 결과값을 sum 변수에 계속 더해준다. (sum += num % 10) 2. 입력 받은 수(num)을 10으로 계속 나누어준다. (num /= 10) 3. 입력 받은 수가 0이 될 때까지 1, 2번 과정을 반복한다. ■ 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include using namespace std; int main() { int num, sum = 0; cin >> num; while (num != 0) { sum += num % 10; num /= 10; } cout

  30. 2021.02.08 [BOJ2455][C++] 지능형 기차

    문제 최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. 이 장치를 이용하여 출발역에서 종착역까지 가는 도중 기차 안에 사람이 가장 많을 때의 사람 수를 계산하려고 한다. 단, 이 기차를 이용하는 사람들은 질서 의식이 투철하여, 역에서 기차에 탈 때, 내릴 사람이 모두 내린 후에 기차에 탄다고 가정한다. 내린 사람 수탄 사람 수1번역(출발역)2번역3번역4번역(종착역) 0 32 3 13 28 25 39 0 예를 들어, 위와 같은 경우를 살펴보자. 이 경우, 기차 안에 사람이 가장 많은 때는 2번역에서 3명의 사람이 기차에서 내리고, 13명의 사람이 기차에 탔을 때로, ..

728x90


📖 Contents 📖