본문 바로가기
반응형

알고리즘 설명52

2020년 정보올림피아드 필기 초등부(2 - 4 ~ 2 - 8) 2020년도 정보올림피아드 1차 초등부 필기 문제 풀이 입니다. 2024.03.24 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(1 ~ 5) 2024.03.25 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(6 ~ 10) 2024.03.26 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(11 ~ 2 - 3) 2 - 4번 짧은 경로를 선택하다보면 쉽게 경로를 그릴 수 있습니다. 우선 이런 최단경로를 구하는 알고리즘은 다익스트라 알고리즘입니다. 하지만 다익스트라 알고리즘은 출발점과 도착점이 정해져 있습니다. 이렇게 출발점과 도착점이 정해지지 않았다면 플로이드 와샬 알고리즘을 사용합니다. 플로이드 와샬 알고리즘에 대해서는 아래 링크 확인 바랍니다. https:.. 2024. 3. 27.
2020년 정보올림피아드 필기 초등부(11 ~ 2 - 3) 2020년도 정보올림피아드 1차 대회 초등부 필기 11번부터 2 - 3번까지 문제 풀이 입니다. 이전 문제는 아래 링크 확인 바랍니다. 2024.03.24 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(1 ~ 5) 2024.03.25 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(6 ~ 10) 11번 A부터 Z까지 모든 경우를 생각하면 1부터 26까지 나타낼 수 있습니다. 따라서 숫자가 26보다 크다면 문자로 나타낼 수 없습니다. 즉 1234123의 중간에 있는 4는 앞에있는 숫자 3이랑 합쳐 34를 만들거나 뒤에 있는 1과 합쳐 41을 만들 수 없습니다. 4는 D 하나밖에 나타낼 수 없습니다. 그럼 123D123으로 나타낼 수 있습니다. 문제에서 123은 3개로 나타낼 .. 2024. 3. 26.
2020년 정보올림피아드 필기 초등부(6 ~ 10) 2020년도 정보올림피아드 1차 대회 초등부 필기 6번부터 10번까지 문제 풀이 입니다. 1번부터 5번까지는 아래 링크 확인 바랍니다. 2024.03.24 - [알고리즘 설명] - 2020년 정보올림피아드 필기 초등부(1 ~ 5) 2020년 정보올림피아드 필기 초등부(1 ~ 5) 2020년 정보올림피아드 1차 필기 시험 초등부 1번부터 5번까지 풀이 진행하겠습니다. 1번 나머지 연산을 이해하는지 묻는 문제 입니다. (A * B) % C 연산은 ((A % C) * (B % C)) % C로 나타낼 수 있습니다. davincicoding.co.kr 6번 이런 문제는 시뮬레이션을 통해 해결할 수 있습니다. 1번 상자부터 금화가 있다고 가정하고 사실 여부를 따져보면 문제가 해결 됩니다. 1번 상자 금화 참 참 거.. 2024. 3. 25.
2020년 정보올림피아드 필기 초등부(1 ~ 5) 2020년 정보올림피아드 1차 필기 시험 초등부 1번부터 5번까지 풀이 진행하겠습니다. 1번 나머지 연산을 이해하는지 묻는 문제 입니다. (A * B) % C 연산은 ((A % C) * (B % C)) % C로 나타낼 수 있습니다. 예를 들어 보겠습니다. (7 * 5) % 3 은 35 % 3 으로 2입니다. 이것을 분배하면 ((7 % 3) * (5 % 3)) % 3으로 (1 * 2) % 3으로 아까와 같이 2가 되는 것을 알 수 있습니다. 3^2020은 2020을 4로 나누면 505가 되고, 3^4를 505번 곱한것과 같습니다. 따라서 이 문제를 풀어보면 다음과 같습니다. ((3^4 % 5) * (3^4 % 5) … (3^4 % 5)) % 5로 나타낼 수 있습니다. 3 ^ 4 % 5는 1이기 때문에 결국.. 2024. 3. 24.
2019년 정보올림피아드 필기 중등부(2 - 4 ~ 2 - 8) 2019년 정보올림피아드 1차 대회 중등부 필기 2-4번부터 2-8번까지 문제 풀이 입니다. 이전 문제는 아래 링크 확인 바랍니다. 2024.03.18 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(1 ~ 5) 2024.03.20 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(6 ~ 10) 2024.03.21 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(11 ~ 2 - 3) 2 - 4번 버튼을 누르면 그 좌 우도 같이 숫자가 변합니다. 모두 0으로 만들기 위해서는 5번째 버튼을 눌러 6번째, 7번째 1을 0으로 바꾸고, 4번째 0은 1로 바뀌게 해야 합니다. 3번째 버튼을 누르면 5번을 누른것과 마찬가지로 3번째, 4번째 1이 0으로 바뀌고 2번째 0만 .. 2024. 3. 23.
교란 순열이란? 완전 순열(Complete permutation) 또는 교란(derangement) 순열이라 불리는 순열에 대해 알아보겠습니다. 교란 순열의 예를 들어 보겠습니다. 교란 순열이란? 졸업을 맞이하여 서로를 축하하기 위해 친구 N명이 각자 선물 하나씩을 준비하였습니다. 선물을 내려놓고 아무거나 하나씩 집었을 때 자신의 선물이 아닌 다른 사람의 선물을 선택 할 경우의 수를 교란 순열이라고 합니다. 선물을 아무거나 고르는 경우의 수는 N!로 쉽게 구할 수 있습니다. 하지만 자신의 선물을 고르지 않는 경우에는 다른 방식으로 문제를 해결해야 합니다. 친구가 1명일 때 먼저 친구가 1명 있다고 생각하겠습니다. 한 명이 선물을 고른다면 어떻게 해도 자기 자신의 선물을 고를 수 밖에 없습니다. 따라서 경우의 수는 0 입.. 2024. 3. 22.
2019년 정보올림피아드 필기 중등부(11 ~ 2 - 3) 2019년 정보올림피아드 중등부 문제 풀이 입니다. 이전 문제는 아래 링크 확인 바랍니다. 2024.03.18 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(1 ~ 5) 2024.03.20 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(6 ~ 10) 11번 3, 4, 5, 6각형의 모든 쌍을 만드는 문제 입니다. 모든 쌍을 생각하면 총 6가지 입니다. 4C2 = 4 * 3 / 2 = 6 이것을 표현하면 다음과 같습니다. (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6) 모든 쌍이 가능한 경우를 생각해 최소의 수를 찾아야 합니다. (3, 4)의 경우 최소 수는 7개 입니다. 그 다음 가능한 수는 정삼각형을 6개로 만들어 10개로 만들 수 있.. 2024. 3. 21.
2019년 정보올림피아드 필기 중등부(6 ~ 10) 2019년 정보올림피아드 중등부 문제 풀이 입니다. 이전 문제는 아래 링크 확인 바랍니다.2024.03.18 - [알고리즘 설명] - 2019년 정보올림피아드 필기 중등부(1 ~ 5) 2019년 정보올림피아드 필기 중등부(1 ~ 5)2019년 정보 올림피아드 1차 중등부 풀이 입니다. 1번 숫자를 하나하나 계산하기 힘든 문제 입니다. 하지만 잘 보면 숫자를 다른 형태로 바꿀 수 있을 것 같습니다. (2020 - 1) * (2020 + 1) 위와 같이 바davincicoding.co.kr6번한 붓 그리기 관련 내용은 아래 링크 확인 바랍니다.2024.03.15 - [알고리즘 설명] - 한 붓 그리기 가능한 경우 한 붓 그리기 가능한 경우정보 올림피아드 필기에 한 붓 그리기 .. 2024. 3. 20.
2019년 정보올림피아드 필기 중등부(1 ~ 5) 2019년 정보 올림피아드 1차 중등부 풀이 입니다. 1번 숫자를 하나하나 계산하기 힘든 문제 입니다. 하지만 잘 보면 숫자를 다른 형태로 바꿀 수 있을 것 같습니다. (2020 - 1) * (2020 + 1) 위와 같이 바꿔주겠습니다. 이 것은 결국 아래와 같게 됩니다 2020 ** 2 - 1 2020을 제곱한 숫자에 1을 뺀 숫자를 찾고, 2진수로 표현했을 때 연속된 1의 개수를 찾는 문제 입니다. 즉 우리는 정확한 숫자 계산을 할 필요가 없습니다. 결국 이 문제는 2020을 제곱한 숫자의 2진수에 오른쪽 연속된 0이 몇개 있는지 묻는 문제 입니다. 예를 들어 10100000 이라는 2진수가 있습니다. 오른쪽에서 보면 0이 총 5개가 있음을 알 수 있습니다. 여기에 1을 빼면 10011111가 되고 .. 2024. 3. 18.
2019년 정보올림피아드 필기 초등부(2-4~2-8) 2019년 정보올림피아드 1차 대회 초등부 2-4번부터 2-8번까지 문제 풀이 입니다. 이전 문제 풀이는 아래 링크 확인 바랍니다. 2024.03.12 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(1~5) 2024.03.14 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(6~10) 2024.03.16 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(11~2 - 3) 2-4번 모든 수를 다 곱해봐야 할 것 같지만 그렇지 않습니다. 문제에서 첫 배열은 오름차순, 두 번째 배열은 내림차순으로 되어 있다고 했습니다. 첫 번째 끼리 두 수를 곱해서 504보다 작으면 첫 배열의 위치를 바꿔 숫자를 커지게 만들고, 504보다 크면 두 번째 배열의 위치를 바꿔 숫자를 작.. 2024. 3. 17.
2019년 정보올림피아드 필기 초등부(11~2 - 3) 2019년 정보 올림피아드 필기 초등부 11번부터 2 - 3번까지 문제 풀이 입니다. 1번부터 10번까지는 아래 링크 확인 바랍니다. 2024.03.12 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(1~5) 2019년 정보올림피아드 필기 초등부(1~5) 2019년 정보 올림피아드 1차 필기 초등부 문제 풀이 입니다. 1번 (a, b), (b, c), (c, a) 총 3번 비교하면 됩니다. 조합을 구하는 문제로 초등부 문제에서는 3개중 2개를 비교하지만 중등부, 고등부에서는 davincicoding.co.kr 2024.03.14 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(6~10) 2019년 정보올림피아드 필기 초등부(6~10) 2019년 정보올림피아드 필기 초등부 6.. 2024. 3. 16.
한 붓 그리기 가능한 경우 정보 올림피아드 필기에 한 붓 그리기 문제는 매년 출제되는 단골 문제 입니다. 따라서 한 붓 그리기가 언제 가능한지 꼭 기억하고 있어야 합니다. 한 붓 그리기는 오일러 경로(Euler trail)라고도 합니다. 한 붓 그리기는 이미 1736년에 오일러가 증명 했습니다. 한 붓 그리기가 가능한 도형에 대해 알아보겠습니다. 꼭지점의 차수가 모두 짝수 일때 차수란 꼭지점에 인접한 선분이 몇 개인지를 나타냅니다. 위 그림처럼 모든 쪽지점의 차수가 짝수일 때 어느 지점으로 시작해도 다시 출발점으로 돌아오는 한 붓 그리기가 가능합니다. 차수가 모두 짝수인 경우 어느 지점에서 시작해도 한 붓 그리기가 가능하고 출발점으로 돌아옵니다. 꼭지점의 홀수 차수가 2개 일 때 먼저 꼭지점의 홀수 차수가 1개인 경우는 없습니다... 2024. 3. 15.
2019년 정보올림피아드 필기 초등부(6~10) 2019년 정보올림피아드 필기 초등부 6번부터 10번까지 문제 풀이 입니다. 1번부터 5번까지는 아래 링크 확인 바랍니다. 2024.03.12 - [알고리즘 설명] - 2019년 정보올림피아드 필기 초등부(1~5) 2019년 정보올림피아드 필기 초등부(1~5) 2019년 정보 올림피아드 1차 필기 초등부 문제 풀이 입니다. 1번 (a, b), (b, c), (c, a) 총 3번 비교하면 됩니다. 조합을 구하는 문제로 초등부 문제에서는 3개중 2개를 비교하지만 중등부, 고등부에서는 davincicoding.co.kr 6번 이 문제는 시뮬레이션을 직접하여 첫 번째 개미가 떨어진 시간과 마지막 개미가 떨어진 시간의 차이를 구해야 합니다. 먼저 첫 번째 개미가 떨어질 때까지 시뮬레이션 해보겠습니다. 먼저 시작 .. 2024. 3. 14.
2019년 정보올림피아드 필기 초등부(1~5) 2019년 정보 올림피아드 1차 필기 초등부 문제 풀이 입니다. 1번 (a, b), (b, c), (c, a) 총 3번 비교하면 됩니다. 조합을 구하는 문제로 초등부 문제에서는 3개중 2개를 비교하지만 중등부, 고등부에서는 계산을 직접 해야 합니다. $$ nC_r = _3C_2 = \frac{3 * 2}{2} = 3 $$ 2번 5명의 친구들을 2명씩 묶는 문제 입니다. 즉 조합을 이용하여 2명씩 묶는 것은 쉽게 구할 수 있습니다. 5 * 4 / 2 = 10이 됩니다. 10개의 조합이 나오니까 한쌍씩 악수를 한다면 10분이 걸립니다. 여기서는 5명이기 때문에 한 번에 두 쌍이 악수를 하고 한 명이 남습니다. 즉 2쌍씩 악수할 수 있으므로 총 5분이 걸립니다. 3번 5개의 원을 흰색 또는 회색으로 칠해야 합.. 2024. 3. 12.
파이썬 음수의 나머지 연산 나머지 연산은 프로그래밍에서 정말 많이 사용하는 연산자 입니다. 나머지 연산자(%)에 대해서 아직 잘 모른다면 아래 링크를 통해 확인 바랍니다. https://wikidocs.net/214915 08. 나머지 연산 [TOC] 실생활에서는 잘 사용하지 않지만 프로그래밍에서 많이 사용하는 연산중 하나가 나머지 연산 입니다. 나머지 연산은 모듈로(Modulo) 연산 이라고도 합니다. 나머지 연… wikidocs.net 음수를 양수로 나머지 연산하기 나머지 연산자를 활용하지만 아마도 음수의 나머지 연산은 어떻게 동작하는지 생각해 보지 않았을 것입니다. -21이라는 숫자를 5로 나눈 나머지를 구한다고 하겠습니다. 답이 무엇일지 생각해 보시기 바랍니다. a = -21 b = 5 print(a % b) a라는 숫자를.. 2024. 3. 11.
2차원 배열 회전하기 배열의 회전 이해하기 알고리즘 문제를 풀다보면 배열을 회전시켜야 하는 경우가 있습니다. 이런 경우 어떻게 해야 하는지 당황하는 친구들을 위해 배열을 회전하는 방법에 대해 알아보겠습니다. 위 그림과 같이 1부터 9까지의 3 X 3 배열을 시계방향으로 90도 회전을 하면 오른쪽 그림처럼 됩니다. 회전을 눈으로 보면 쉽지만 이것을 직접 배열로 바꾸면 값을 어떻게 바꿔주어야 할지 막막합니다. 이것을 행과 열의 위치로 표현해 보겠습니다. 앞의 수는 i열을 뜻하는 열의 수, 두 번째 수는 j행을 뜻하는 행의 수 입니다. 0, 0 에 있는 수를 0 0 으로 표현한 것입니다. 0번째 행을 확인해보면 각 열의 값이 행의 값으로 바뀌어 있음을 알 수 있습니다. 1행, 2행을 봐도 똑같이 열의 값이 행의 값으로 바뀌어 있습.. 2024. 1. 24.
파이썬의 문자를 숫자로, 숫자를 문자로 바꾸기 파이썬을 사용하다보면 가끔 문자를 숫자로, 숫자를 문자로 바꿔주고 싶은 경우가 생깁니다. 이럴때 문자를 숫자로 바꿔주는 방법에 대해 알아보겠습니다. 문자를 숫자로 나타낸 표를 보통 아스키(ASCII) 코드라고 합니다. 아스키코드의 약자는 다음과 같습니다. ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 아스키코드는 컴퓨터가 나오기 이전 모스 부호 전송기에서 사용하던 통신 방법입니다. a라는 문자를 숫자로 바꿔준 뒤 그 신호를 전달하고 다시 그 숫자를 문자 a로 바꿔주어 정보를 주고받던 시절에 사용하던 방식입니다. 이런 아스키 코드를 지금은 사용할 일이 없지만 알고리즘 문제를 풀다보면 문자를 숫자로 바꿔줘야 하는 테크닉이.. 2023. 11. 20.
최소공통조상(LCA) LCA란? 최소 공통 조상(Lowest Common Ancestor) 줄여서 LCA로 불리는 이 알고리즘은 트리에서 두 정점이 가지고 있는 가장 가까운 공통 조상을 찾는 알고리즘 입니다. 위와 같은 그래프가 있을 때 6번 정점과 9번 정점의 최소 공통 조상은 3번 입니다. 우리는 눈으로 바로 3번이 최소 공통 조상이라는 것을 찾을 수 있지만 알고리즘으로 이를 찾으려면 쉽지 않습니다. 어떻게 찾을 수 있을지 한번 생각해 보고 다음을 읽어보시기 바랍니다. 알고리즘 이해하기 최소 공통 조상을 찾는 방법은 하나씩 자신의 부모를 타고 올라가다가 공통으로 만나는 첫 번째 정점을 찾는 것입니다. 8번과 9번의 최소 공통 조상을 찾는다고 해보겠습니다. 두 정점의 부모를 찾아 올라갑니다. 먼저 8의 부모인 5와 9의 부.. 2023. 10. 9.
[알고리즘]Merge Sort 병합 정렬이라고 불리는 머지 소트(Merge Sort)에 대해 알아보겠습니다. 다양한 정렬 알고리즘이 있지만 다빈치코딩 알고리즘에는 이분 정렬에 대해서만 소개했었습니다. 이유는 어짜피 시간복잡도가 비슷하고 이분 탐색만 알아도 정렬에 관한 문제를 푸는데 큰 어려움이 없기 때문입니다. 하지만 Inversion Counting 에 대해 소개하고 세그먼트 트리로 푸는 방법만 알려주고, 정작 Inversion Counting 으로 풀 수 있는 문제 버블 소트를 풀 때에는 Merge sort 로 해결하였던 것이 생각나 merge sort에 대해서도 설명해야 겠다는 생각을 하였습니다. Merge Sort 란? 위키피디아에 있는 merge sort의 설명 이미지 입니다. 분할 정복과 비슷한 형태로 진행되는 것을 알 수.. 2023. 9. 26.
LIS 란? LIS(Longest Inceasing Sequence)란? LIS는 Longest Increasing Subsequence의 약자로 최장 증가 수열 또는 최장 증가 부분수열이라고 합니다. LIS를 이해하기 위해서는 먼저 Increasing Subsequence 한글로 증가 부분수열을 알아야 합니다. 증가 부분수열을 말 그대로 증가하고 있는 부분 수열을 나타냅니다. 가령 [5, 1, 9, 2, 7, 3, 8, 4, 6] 이라는 리스트가 존재할때 여기서 증가하는 부분 수열을 찾아 보겠습니다. [5, 9], [5, 7, 8], [1, 2, 7, 8] 등등 다양한 증가하는 부분수열이 존재합니다. 이중 가장 길이가 큰 최장 증가 부분 수열은 [1, 2, 3, 4, 6]이 됩니다. 이 최장 증가 부분 수열을 찾는.. 2023. 9. 21.
Inversion Counting 알고리즘 Inversion Counting 이란? Inversion Counting 이란 역순으로 되어 있는 순서쌍의 개수를 세는 유명한 알고리즘 입니다. 쉽게 예를 들면 아래와 같은 숫자가 있습니다. 3 2 5 4 1 이렇게 5개의 숫자가 있습니다. 하나씩 비교해보면 (3, 2)는 3이 더 크기 때문에 역순으로 되어 있습니다. (3, 5)는 역순이 아닙니다. (3, 4) 역시 역순이 아닙니다. (3, 1)은 역순으로 되어 있습니다. 이런식으로 모든 순서쌍을 비교해보면 아래와 같은 순서쌍을 찾을 수 있습니다. (3, 2), (3, 1), (2, 1), (5, 4), (5, 1), (4, 1) 이렇게 6개의 순서쌍을 찾을 수 있습니다. 이것은 버블 정렬을 진행할 때 몇 번이나 교환을 진행하는지의 숫자와 같습니다. .. 2023. 9. 11.
페르마의 소정리 다빈치코딩 알고리즘에 나머지 정리에 대해 설명하다 분배 법칙에 대해 글을 쓰다보니 나눗셈에 대해서는 왜 분배 법칙이 적용이 안되는지를 설명하게 되었습니다. 그러면서 페르마의 소정리를 이용하면 나눗셈도 나머지 연산을 할 수 있다고 하였는데 그것에 대해 설명하려 합니다. 다빈치코딩 알고리즘은 초등학교 고학년에서 중학교 저학년 친구들을 대상으로 하였기 때문에 페르마의 소정리를 다루는 것은 책이 아닌 블로그에 정리하는 것이 맞다고 느껴졌습니다. 페르마의 소정리(Fermat’s little theorem) 페르마의 소정리는 다음과 같이 정의 됩니다. “소수 p와 p의 배수가 아닌 정수 a가 있을 때 a^p를 p로 나눈 나머지와 a를 p로 나눈 나머지는 같다” 입니다. 수학적으로는 아래와 같이 표현 합니다. $$ .. 2023. 8. 28.
반응형