분류 전체보기 54

[수학 - 제곱근]백준 제곱 수?(34027번) 풀이 (C++/Python)

사칙연산에서 덧셈, 뺄셈, 곱셈, 나눗셈에 대해 간단하게 알아봤습니다.이 중에 곱셈에 대해 좀 더 깊게 공부할려고 합니다. 우선 2를 몇 번 곱하면 값이 각각 어떻게 나올까요?먼저 1번만 곱하면 값은 2가 나옵니다.(1 * 2 = 2)그 다음 2번 곱하면 값은 4가 나옵니다.(1 * 2 * 2 = 4)그러면 2를 n번 곱하면 뭐라고 부를까요? 2^n이라고 부릅니다. 만약 2가 아닌 3으로 바꾸면 3^n이 되며 예시로 n=4이면 3^4 = 81이 됩니다.이것을 일반화하면 다음과 같은 식이 나옵니다. $$y = x^n$$">$$y = x^n$$같은 수를 여러 번 곱하는 것을 거듭제곱이라고 부릅니다.그리고 여기서 x를 밑(base), n을 지수(exponent)라고 부릅니다.예시로 x = 5, n = 3이..

[class 2]백준 직각삼각형(4153번) 풀이 (C++/Python)

문제 : 직각삼각형(4153번)(Bronze III)문제 링크 : https://www.acmicpc.net/problem/4153출처 : Baekjoon Online Judge while문으로 입력 받아서 세 개의 변을 입력 받아 직각삼각형 여부를 판정하고 세 개의 변 모두 0으로 나오면 while문을 탈출하는 문제입니다.직각삼각형인지 판별할려면 저번에 나온 피타고라스 정리 공식을 활용하면 되겠죠? $$a^2 + b^2 = c^2$$">$$a^2 + b^2 = c^2$$해당 공식이 나온 게시글에 나온 소스 코드를 그대로 활용하면 됩니다.[C++]#include using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(nu..

[수학 - 피타고라스 정리(기하학)]백준 Patyki(8723번) 풀이 (C++/Python)

우리가 중학교 2학년 때 "밑변의 제곱과 높이의 제곱의 합은 빗변의 제곱이다"라는 말을 들어본 적 있을 것입니다.오늘은 피타고라스의 정리에 대해 간단하게 알아보고 그 공식을 활용하여 백준 문제를 해결하도록 하겠습니다.밑변 a, 높이 b, 빗변 c인 직각삼각형이 있습니다.피타고라스의 정리에 의하면 직각삼각형일 때 다음과 같은 공식이 성립됩니다. $$a^2 + b^2 = c^2$$">$$a^2 + b^2 = c^2$$피타고라스의 정리를 증명하는 방법은 수백 가지 발견되었습니다.그 중 가장 대중적인 증명 과정 하나를 소개하도록 하겠습니다.정사각형 ABCD와 정사각형 EFGH가 존재합니다.이들은 각각 길이가 (a+b), c이며 여기서 밑변이 a, 높이가 b인 직각삼각형 4개가 붙어있는 상태입니다.수식 전개해서..

[class 1]백준 알파벳 찾기(10809번) 풀이 (C++/Python)

문제 : 알파벳 찾기(10809번)(Bronze II)문제 링크 : https://www.acmicpc.net/problem/10809출처 : Baekjoon Online Judge 이 문제는 문자열 하나 입력 받고 index 0부터 순차 탐색(sequential search)을 해서 해당 글자가 처음으로 등장하는 위치(index)를 출력하는 문제입니다.이 때 해당 글자가 들어가지 않으면 -1로 출력하게 됩니다. 우선 비어 있는 문자열(size = 0)이라고 가정하면 모든 글자가 출력되지 않으니 초기 배열은 크기가 26이고 모두 -1로 초기화합니다.int alphabet[26];for(int i = 0; i 그 다음 문자열 s를 입력 받고 문자열의 크기를 저장합니다.string s;cin >> s;in..

[class 1]백준 OX퀴즈(8958번) 풀이 (C++/Python)

문제 : OX퀴즈(8958번)(Bronze II)문제 링크 : https://www.acmicpc.net/problem/8958출처 : Baekjoon Online Judge O이면 1점 획득인데 O가 2연속이면 1+2 = 3점을 획득합니다.그리고 O가 3연속이면 1+2+3 = 6점 획득하는 방식입니다.하지만 단 한 번이라도 X로 만나서 연속이 깨지면 그 즉시 0점 획득이고 그 다음에 다시 O가 오면 1점 획득하는 방식입니다.OOXXOXXOOO예시 입력이 다음과 같습니다.우선 index 0부터 시작합니다. (0번째 원소)초기 count는 0입니다.O이니 count는 1이 되고 점수(result)를 count만큼 더해서 1점이 됩니다.(1번째 원소)O이므로 count++ 되고 count는 2가 됩니다.이..

[class 1]백준 나머지(3052번) 풀이 (C++/Python)

문제 : 나머지(3052번)(Bronze II)문제 링크 : https://www.acmicpc.net/problem/3052출처 : Baekjoon Online Judge 이 문제는 원래 HashSet 혹은 HashMap을 사용해서 해결해야 하는 문제입니다.하지만 이 문제는 class 2가 아닌 class 1이며 해당 문제를 곰곰히 생각해보니 굳이 HashSet 혹은 HashMap을 사용할 이유가 없습니다.왜냐면 결국 나누기 42 해서 나오는 나머지 경우의 수가 42개 뿐이며 이것은 배열만으로 구현할 수 있거든요.bool check[42];예시로 나머지가 1, 2, 3, 4, 5, 6, 7, 8, 9, 1이라고 가정합니다.그러면 check[1]부터 check[9]까지 모두 true로 바뀌게 되며 1이 ..

[자료구조 기초 - 연결 리스트(LinkedList)]백준 에디터(1406번) 풀이 (C++/Python)

저번에는 ArrayList에 대해 알아봤습니다.이번에는 LinkedList에 대해 알아보겠습니다. ArrayList는 1-2-3-4-5-6처럼 주소값이 연속적으로 이어지는 동적 배열입니다.그리고 조회 및 수정할 때 연속적인 index 기반이라서 O(1)의 시간 복잡도를 가지고 있습니다.하지만 여기서 한계점이 있습니다.0xA00xA10xA20xA30xA40xA50xA60xA70xA80xA90xA20xA8123456 현재 다음과 같이 저장되어 있습니다.만약 맨 끝의 원소만 삭제한다고 하면 포인터 한 칸만 움직이면 되거든요.그런데 만약 딱 중간에 있는 0xA4의 원소값을 없앨려고 하면 어떻게 해야 할까요?그러면 매우 귀찮아지는 일이 벌어집니다.*(0xA4) = *(0xA5);*(0xA5) = *(0xA6);..

[자료구조 기초 - 배열 리스트(ArrayList)]백준 제로(10773번) 풀이 (C++/Python)

데이터를 저장할 때 다양한 자료구조를 활용합니다.이 중 저번에 정적 배열(Array)을 간단하게 확인해봤습니다.로우 레벨에서 봐도 정적 배열은 메모리 내부에서 임의의 주소값에 정해진 크기대로 메모리 할당해서 그 안에 값 조회 및 수정을 할 수 있었습니다.그런데 정적 배열의 단점은 추가 및 삭제가 안 됩니다. 그래서 이번엔 다른 자료 구조를 들고 왔습니다.리스트(List)는 기존 정적 배열에서 메모리 재할당을 통해 추가 및 삭제할 수 있는 자료 구조입니다.리스트는 ArrayList와 LinkedList가 있는데 여기서는 ArrayList만 설명하겠습니다.왜냐면 LinkedList 이것도 결국 ArrayList 2개로 비슷하게 구현할 수 있거든요.물론 로우 레벨로 보면 LinkedList와 ArrayList..

[class 1]백준 음계(2920번) 풀이 (C++/Python)

문제 : 음계(2920번)(Bronze II)문제 링크 : https://www.acmicpc.net/problem/2920출처 : Baekjoon Online Judge 1,2,3,4,5,6,7,8 순서로 연주하면 ascending, 8,7,6,5,4,3,2,1 순서로 연주하면 descending, 둘 다 아니라면 mixed로 출력된다고 합니다.그런데 문제를 잘 읽어보면 "1부터 8까지 숫자가 한 번씩 등장한다."가 있습니다.즉, ascending으로 나오는 경우는 12345678이 유일하며 descending으로 나오는 경우는 87654321가 유일하고 나머지는 모두 mixed입니다.이것을 C++로 구현하면 다음과 같이 나옵니다.#include using namespace std; int main(..

[class 1]백준 문자열 반복(2675번) 풀이 (C++/Python)

문제 : 문자열 반복(2675번)(Bronze II)문제 링크 : https://www.acmicpc.net/problem/2675출처 : Baekjoon Online Judge 이 문제는 정말 간단합니다.테스트 케이스 수 입력하고 그 다음 반복 횟수 int r과 문자열 string s를 입력 받아s의 각 글자들을 r번 반복 출력하면 되는 문제입니다.그러니 바로 소스 코드를 올리겠습니다.#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while(t--) { int r; cin >> r; string..