전체 글 465

[C++] STL stack 사용법

Stack 스택 (Stack) 은 제일 마지막에 넣은 데이터가 가장 먼저 나오는 LIFO (Last In First Out) 자료 구조이다. Stack 구조에 대한 자세한 설명은 아래 게시글에서 확인할 수 있다. https://readytojoin.tistory.com/35 [ Algorithm ] 스택 도입 이 글은 자료구조에서 가장 초반에 배우는 스택에 대한 개념을 담고 있습니다. 자료구조에 해당한다고 해서 겁먹을 필요 없이, 순서에 따라 차근차근 원리를 이해하면 쉬운 난이도를 가지 readytojoin.tistory.com C++에서 stack 은 C++ 표준 라이브러리 (STL; Standard Template Library) 로 정의되어 있기에, 필요할 때 선언한다면 편리하게 사용할 수 있다. ..

[ BOJ ] 16458 : 가장 큰 숫자 ( GOLD 5 ) / Python

문제 여러 개의 숫자들이 주어졌을 때, 이들 중 가장 큰 숫자를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 n, m(15 ≤ n ≤ m ≤ 1000)이 주어진다. 다음 n개의 줄에는 공백(' ')과 별 표('*')로 이루어진 숫자들이 주어진다. 각 줄마다 총 m개의 문자가 있다. 모든 숫자들은 어떤 자연수 k에 대해 가로 3k, 세로 5k 크기의 직사각형에 딱 맞게 들어가고, 이 직사각형을 다시 15개의 k × k 정사각형들로 분할할 경우 각 정사각형 안의 문자들은 모두 공백 혹은 별 표 중 한 종류로만 이루어져 있음이 보장된다. 위에서 언급한 숫자를 포함하는 직사각형들에 대해, 어떤 직사각형도 서로 겹쳐져 있지 않다. 또한 어떤 직사각형도 상하좌우 혹은 대각선 방향으로 맞닿아 있지 않다. 가장 큰..

[ BOJ ] 10172 : 개 ( BRONZE 5 ) / C, C++, Python, Java

문제 아래 예제와 같이 개를 출력하시오. 입력 없음. 출력 개를 출력한다. 풀이 과정 고양이 문제와 마찬가지로 이스케이프 시퀀스를 다루는 문제이다. 예시 출력과 동일하게 출력할 수 있도록 코드를 작성하자. C #include int main(void) { printf("|\\_/|\n"); printf("|q p| /}\n"); printf("( 0 )\"\"\"\\\n"); printf("|\"^\"` |\n"); printf("||_/=\\\\__|\n"); return 0; } C++ #include using namespace std; int main(void) { cout

[ BOJ ] 10171 : 고양이 ( BRONZE 5 ) / C, C++, Python, Java

문제 아래 예제와 같이 고양이를 출력하시오. 입력 없음. 출력 고양이를 출력한다. 풀이 과정 이스케이프 시퀀스를 다루는 문제이다. 예시 출력과 동일하게 출력할 수 있도록 코드를 작성하자. C #include int main(void) { printf("\\ /\\\n"); printf(" ) ( \')\n"); printf("( / )\n"); printf(" \\(__)|"); return 0; } C++ #include using namespace std; int main(void) { cout

[ BOJ ] 11382 : 꼬마 정민 ( BRONZE 5 ) / C, C++, Python, Java

문제 꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다! 입력 첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다. 출력 A+B+C의 값을 출력한다. 풀이 과정 수 범위가 크니 자료형에 유의해서 A, B, C 를 입력받고 A+B+C 를 출력하자. C #include int main(void) { long long a, b, c; scanf("%lld %lld %lld", &a, &b, &c); printf("%lld", a+b+c); return 0; } C++ #include using namespace std; int main(void) { long long a, b, c; cin >> a >> b >> ..

[ BOJ ] 13909 : 창문 닫기 ( SILVER 5 ) / Python

문제 서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 2번째 사람은 2의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 이러한 행동을 N번째 사람까지 진행한 후 열려 있는 창문의 개수를 구하라. 단, 처음에 모든 창문은 닫혀 있다. 예를 들어 현재 3개의 창문이 있고 3명의 사람이 있을 때, 1번째 사람은 1의 배수인 1,2,3번 창문을 연다. (1, 1, 1) 2번째 사람은 2의 배수인 2번 창문을 닫는다. (1, 0, 1) 3번째 사람은 3의 배수인 3번 창문을 닫는다. (1, 0, 0) 결과적으로 마지막에 열려 있는 창문의 개수는 1개 이다. 입력 첫 번째 줄에는 창문의..

[ BOJ ] 2588 : 곱셈 ( BRONZE 3 ) / C, C++, Python, Java

문제 (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다. (1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다. 출력 첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다. 풀이 과정 (3) - (1)과 (2)의 일의 자리 수를 곱한 값 (4) - (1)과 (2)의 십의 자리 수를 곱한 값 (5) - (1)과 (2)의 백의 자리 수를 곱한 값 (6) - (1)과 (2)를 곱한 값 이를 차례대로 출력한다. C #include int main(v..

[ Algorithm ] 재귀

도입 이 글은 재귀 알고리즘에 대한 설명을 담고 있습니다. 프로그래밍 언어를 공부하다보면, 함수 혹은 메소드에 대해 배우면서 접할 수 있는 알고리즘이 바로 재귀입니다. 사실 재귀는 반복문을 실행하는 것보다 메모리 측면에서 비효율적이라는 의견도 존재하지만 (함수를 종료시키지 않은 채로 계속 실행하기에) 잘 사용하면 문제를 다른 시선으로 바라볼 수 있으며, 복잡한 문제 상황을 간결한 코드로 해결할 수도 있는 알고리즘입니다. 재귀 알고리즘을 학습하고 여러 문제 상황에 대응할 수 있는 능력을 기르는 것이 이 글의 목적입니다. 본 글은 C를 기반으로 작성되었습니다. 접근 https://www.acmicpc.net/problem/4779 4779번: 칸토어 집합 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로..

[ BOJ ] 16139 : 인간-컴퓨터 상호작용 ( SILVER 1 ) / Python

문제 승재는 인간-컴퓨터 상호작용에서 생체공학 설계를 공부하다가 키보드 자판이 실용적인지 궁금해졌다. 이를 알아보기 위해 승재는 다음과 같은 생각을 했다. '문자열에서 특정 알파벳이 몇 번 나타나는지 알아봐서 자주 나타나는 알파벳이 중지나 검지 위치에 오는 알파벳인지 확인하면 실용적인지 확인할 수 있을 것이다.' 승재를 도와 특정 문자열 S, 특정 알파벳 alpha와 문자열의 구간 [l,r]이 주어지면 S의 l번째 문자부터 r번째 문자 사이에 alpha가 몇 번 나타나는지 구하는 프로그램을 작성하여라. 승재는 문자열의 문자는 0번째부터 세며, l번째와 r번째 문자를 포함해서 생각한다. 주의할 점은 승재는 호기심이 많기에 (통계적으로 크게 무의미하지만) 같은 문자열을 두고 질문을 q번 할 것이다. 입력 첫..