SlideShare a Scribd company logo
How To Find a Solution SKKU NPC 송은진
Introduction 많은 문제들은 문제를 제대로 읽는 것 만으로 문제를 해법을 찾을 수 있다. 비슷한 해법을 가지는 문제들은 비슷한 특성을 가지고 있기 때문이다. 따라서 이런 특징을 발견해 낼 수 있는 고수들에게는 더할 나위 없는 힌트가 된다. 이번 세미나의 주요 목적은 이러한 특징을 찾아 낼 수 있도록 하는 것이다.
Straight-forward problem 시뮬레이션이나 탐색, 정렬 등 특별한 기술을 필요로 하지 않는 문제이다. 많은 경우에, 이런 문제들은 Straight-forward 한 일들을 차례로  수행하면서 해결할 수 있다. 문제의 범위나 크기 제한은 많이 높지 않으며, 많이 낮지도 않다. 주로 쉬운 문제로 출제되며, TopCoder에서는 얼마나 빠르고 문제에 적합하게 코딩 하는지를 테스트하기 위해 출제된다.  이 유형의 정말 간단한 문제들은 단지 문제에 쓰여진 것을 차례로 실행하는 것만을 요구하는 경우도 있다.
Straight-forward problem Business Tasks – SRM 236 Div 1: N개의 작업이 원형 리스트의 형식으로 쓰여져 있어, 첫 번째 작업은 마지막 에 인접해 있다. 첫번째작업부터, 시계방향으로  - 1번 부터 N번까지- 작업이 수행된다. N번 작업을 수행하고 난 뒤, N번째 작업을 리스트에서 없애고 다시  다음 사용 가능한 작업을 N번 수행한다.  리스트에 하나가 남을 때 까지 반복하고, 마지막으로 남은 수를 리턴 하라. N<=1000 일 경우, 이 문제는 단지 코딩을 하기만 하면 된다. 차례차례 하나가 남을 때까지 작업을 진행하면 된다.대개 이런 타입의 문제들은 N이 작게 주어지고, 우리는 N이 큰 경우에 대한 복잡한 solution을 생각할 필요가 없다. 대략 1억 번 정도의 연산을 수행하면 시간 제한을 채우게 된다.
Straight-forward problem TallPeople– SRM 208 Div 1: 사람들이 R행과 C열로 서있다. 문제는 2개의 특정한 키를 리턴 하는 것이다. 첫번째 수는 각 행마다 가장 키가 작은 사람들을 찾고, 그 중에 가장 키가 큰 사람의 키이다. (“tallest-of-the-shortest”) 두번째 수는 각 열마다 가장 키가 큰 사람들을 찾고, 그 중에 가장 키가 작은 사람의 키이다. (“shortest-of-the-tallest”) 간단한 탐색 문제이다.  정렬만 하면 된다.
Breadth First Search (BFS) BFS를 사용하는 문제들은 대개 문제에 주어진 StartingPoint 부터 End Point까지 도달하는데 가장 작은 비용을 찾는 문제들이다. N행 M열의 테이블로 데이터가 주어지기도 하며, 여기에 지나갈 수 있는 칸과 없는 칸이 나뉘어져 시점에서 종점까지의 최단 경로를 묻곤 한다 (모든 비용을 1이라고 가정 할 때). 이런 테이블은 미로, 지도, 도시들, 그리고 다른 것들로 표현된다.  이러한 BFS 문제들은 시간 복잡도가 많은 경우에 linear(O(n)) 이므로, N또는 M이 높게 주어질 수 있다.
Breadth First Search (BFS) SmartWordToy – SRM 233 Div 1: 소문자로 이루어진 단어가 주어진다. 당신은 한번의 click 만으로 어떤 문자를 이전이나 다음의 알파벳으로 바꿀 수 있다. (예를 들어, ‘c’는 ‘b’나 ‘d’로 바뀔 수 있다.) 알파벳을 둥글게 나열해서, ‘a’는 ‘z’가 될 수 있고, ‘z’는 ‘a’가 될 수 있다. 또 “X XXX” 형식의 금지어 형식이 입력되는데, 주어진 시작단어에서 끝 단어까지 이런 금지어를 나타내지 않고 갈 수 없다면 -1, 갈 수 있다면 최소의 click 수를 구하여 리턴 하라.  (예를 들어, “lf a tc e”이 금지어의 형식으로써 “late”, “fate”, “lace”, “face” 의 금지어를 정의할 수 있다.) Word는 상태로써 생각될 수 있고, 최대 26^4개의 4개의 문자로 된 단어를 구성할 수 있다. 한상태에서 다른 상태로 가는 두 가지 방법이 존재하며, 비용은 항상 1이다. (A single click) 시작 상태에서 끝 상태까지 가는 최소 비용을 구해야 한다. -> 전형적인 BFS문제!
Breadth First Search (BFS) CaptureThemAll – SRM 207 Div 2: 해리와 조는 마법 체스게임을 하고 있다. 그는 나이트 하나를 가지고 있고, 그의 상대편인 조는 하나의 퀸과 하나의 룩을 가지고 있다. 해리는 이번 턴에 “Haste”라는 주문을 외어서, 나이트를 여러 번 움직일 수 있다. 해리의 나이트가 최소 몇 번을 움직여야 퀸과 룩을 다 잡을 수 있는지 구하여라.  언뜻 보면 dynamic programming이나 backtracking 같아 보인다. 하지만 문제를 잘 읽어보면 BFS 문제라는 다음의 힌트들이 보인다. 테이블이 주어진다. 나이트는 점프를 하여근처의 여러 위치로 이동할 수 있다. 지금의 위치에서 다음의 위치로 가는데 비용이 1이다. (한번 움직인다.) 나이트의 최소 움직임을 구해야 한다.
Flood Fill BFS를 이용해 모든 도착가능 지점을 찾는 기술이다. BFS와 다른 점은 최소 비용/경로가 요구되지 않는다는 것이다. 예를 들어, 1이면 못 지나가고 0이면 지나갈 수 있는 미로가 주어질 때, 출발점으로부터 갈 수 있는 모든 위치를 구하는 문제가 될 수 있다.  Solution은 매우 간단하다 – 하나 씩 차례로 방문하고, 방문하지 않은 이웃 들을 방문한 목록을 저장하는 큐에 넣고, 차례대로 큐에서 하나씩 빼서 같은 작업을 수행한다. 이런 문제일 경우 DFS로는 Stack overflow가 일어나기 때문에사용하지 않는다.
Flood Fill grafixMask – SRM 211 Div 1: 400 x 600 의비트맵이 주어지고, 몇 개의 사각형들이 비트맵의 특정 부분을 덮고 있다. (사각형들의 꼭지점은 정수로 주어진다.) 사각형들이 덮지 않은 부분에서 연결된 부분들의 넓이를 각각 구하라.  테이블이다. (Map) 특정한 포인트는 지나갈 수 없다. (사각형으로 덮힌 부분) 이어진 지역을 찾아야 한다. -> 쉽게 Flood Fill 문제라는 것을 알 수 있다.
Brute Force and Backtracking Brute force에서 답의 lower bound를 가지고 pruning(가지치기) 한 것을 backtracking이라고 한다.둘 다 모든 가능한 경우를 찾고 최적을 찾거나 경우의 수를 찾는 것이 대부분이다.  범위가 작다는 것(N<=20 정도)이 문제의 힌트가 될 수 있다.
Brute Force LargestCircle – SRM 212 Div 2: 몇 개의 사각형으로 표시된 영역이 있는 격자판이 주어진다. 격자판 위에 그릴 수 있는 가장 큰 원의 반지름을 찾아라. 원은 정사각형으로 표시된 영역을 지나가지 않아야 한다. 원의 중앙은 격자 위의 점이어야 하며,  반지름은 정수여야 한다. 격자의 크기는 최대 50이다.  가장 큰 힌트는 격자의 작은 사이즈이다.  이 문제는 모든 위치에서 주어진 규칙에 따라 원을 구해보는 것을 시도해 볼 수 있기 때문에 Brute Force로 문제를 푸는 것이 가능하다.  모든 원을 찾은 다음, 큰 것을 선택하면 된다.  최대 50x50 크기에 각 위치마다 최대 원의 개수는 25 개까지 시도해볼 수 있으며 잘 구현하면 선형 시간에 원이 지나가는 칸들을 하나씩 검사할 수 있다.
Backtracking MNS – SRM 148 Div 1: 9개의 숫자가 있는 magic number square가 필요하다. Magic number square는 숫자가 각 행과 각 열의 합이 모두 같게 나열되어 있는 경우를 말한다.  0부터 9 범위 안의 숫자가 9개가 제시된다. 주어진 숫자로 만들 수 있는 서로 다른 Magic number square의 수를 구하여라.  하나 이상의 위치에서 다른 값을 가지면 다른 Magic number square라고 하자.  최대 9개의 작은 수의 숫자가 제시되고, 다른 방법으로 숫자를 나열하여 Magic number square를 찾아야 하므로, Backtracking문제의 특성을 가지고 있다.  모든 숫자들의 나열의 생각해 볼 수 있고, 해당 나열이 Magic number square의 특성을 가지는지 확인해 보고 맞으면 답에 더하면 된다.
Dynamic Programming 꽤 많은 수의 문제들이 이 방법으로 풀 수 있다. 이 형식의 문제라고 찾아내는 것은 매우 중요한 일이다. 그것을 하기 위해서는 DP에 많은 경험이 필요하다.  DP문제에서 제한은 너무 크지도, 너무 작지도 않아서, N^2나 N^3의 복잡도를 가진다. N이 너무 작다면 DP 문제가 아니다.  어떤 여러 개의 작은 상태에서 큰 상태로 가기 위한 방법이 존재하고, 큰 상태는 오직 작은 상태들에 의해서 결정된다.  자세한 내용은 다음주에!
Maximum Flow 최대 유량 문제.  문제의 제한이, O(N^3) 이나O(N^4) 의 해법이 가능한 지를 본다. (500을 넘지 않고, 주로 100 이하이다.) 용량을 가진 그래프가 있거나, 문제의 데이터로 용량을 가진 그래프를 정의할 수 있어야 한다. 그리고 어떤 최대 값을 찾아야 한다.
Maximum Flow Sample problem :  연결된 파이프의 리스트가 있고,  각 파이프의 최대 유량이 주어진다.  시작 지점에서 끝 지점까지 물이 흐른다고 할 때, 끝 지점에서 흐를 수 있는 최대 유량을 구하여라 . N<=100.
Optimal Pair Matching Parking – SRM 236 Div 1 N 대의 자동차와 M개의 주차 공간이 사각형의 평면상에 주어지고, 차가 지나가지 못하는 벽이 존재한다.  각 자동차 마다 가장 짧은 거리를 이동해 주차를 시킨다고 할 때, 이동 거리 중 가장 큰 거리를 구하라.  하나의 주차공간에는 한 대의 자동차만 주차할 수 있다. s t 자동차 주차공간
Q & A

More Related Content

Viewers also liked

Dynamic programming
Dynamic programmingDynamic programming
Dynamic programmingEunjin Song
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
Dongseo University
 
4. dynamic programming(1)
4. dynamic programming(1)4. dynamic programming(1)
4. dynamic programming(1)
Hongjun Jang
 
나를 자극하는 Real world_algorithm (1/2)
나를 자극하는 Real world_algorithm (1/2)나를 자극하는 Real world_algorithm (1/2)
나를 자극하는 Real world_algorithm (1/2)
Mad Scientists
 
Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBook
Hongjun Jang
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro Slides
Hongjun Jang
 
H
HH

Viewers also liked (7)

Dynamic programming
Dynamic programmingDynamic programming
Dynamic programming
 
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
양성봉 - 알기쉬운 알고리즘 - 1장알고리즘의첫걸음
 
4. dynamic programming(1)
4. dynamic programming(1)4. dynamic programming(1)
4. dynamic programming(1)
 
나를 자극하는 Real world_algorithm (1/2)
나를 자극하는 Real world_algorithm (1/2)나를 자극하는 Real world_algorithm (1/2)
나를 자극하는 Real world_algorithm (1/2)
 
Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBook
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro Slides
 
H
HH
H
 

Similar to How to find a solution

세미나
세미나세미나
세미나
Dongyi Kim
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
NAVER D2
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
도형 임
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
Ho Jeong Im
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
GDGCampusKorea
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
NAVER D2
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
NAVER D2
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
Jisu Lee
 
Acmicpcseminar5
Acmicpcseminar5Acmicpcseminar5
Acmicpcseminar5yonsei
 

Similar to How to find a solution (9)

세미나
세미나세미나
세미나
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
Acmicpcseminar5
Acmicpcseminar5Acmicpcseminar5
Acmicpcseminar5
 

How to find a solution

  • 1. How To Find a Solution SKKU NPC 송은진
  • 2. Introduction 많은 문제들은 문제를 제대로 읽는 것 만으로 문제를 해법을 찾을 수 있다. 비슷한 해법을 가지는 문제들은 비슷한 특성을 가지고 있기 때문이다. 따라서 이런 특징을 발견해 낼 수 있는 고수들에게는 더할 나위 없는 힌트가 된다. 이번 세미나의 주요 목적은 이러한 특징을 찾아 낼 수 있도록 하는 것이다.
  • 3. Straight-forward problem 시뮬레이션이나 탐색, 정렬 등 특별한 기술을 필요로 하지 않는 문제이다. 많은 경우에, 이런 문제들은 Straight-forward 한 일들을 차례로 수행하면서 해결할 수 있다. 문제의 범위나 크기 제한은 많이 높지 않으며, 많이 낮지도 않다. 주로 쉬운 문제로 출제되며, TopCoder에서는 얼마나 빠르고 문제에 적합하게 코딩 하는지를 테스트하기 위해 출제된다. 이 유형의 정말 간단한 문제들은 단지 문제에 쓰여진 것을 차례로 실행하는 것만을 요구하는 경우도 있다.
  • 4. Straight-forward problem Business Tasks – SRM 236 Div 1: N개의 작업이 원형 리스트의 형식으로 쓰여져 있어, 첫 번째 작업은 마지막 에 인접해 있다. 첫번째작업부터, 시계방향으로 - 1번 부터 N번까지- 작업이 수행된다. N번 작업을 수행하고 난 뒤, N번째 작업을 리스트에서 없애고 다시 다음 사용 가능한 작업을 N번 수행한다. 리스트에 하나가 남을 때 까지 반복하고, 마지막으로 남은 수를 리턴 하라. N<=1000 일 경우, 이 문제는 단지 코딩을 하기만 하면 된다. 차례차례 하나가 남을 때까지 작업을 진행하면 된다.대개 이런 타입의 문제들은 N이 작게 주어지고, 우리는 N이 큰 경우에 대한 복잡한 solution을 생각할 필요가 없다. 대략 1억 번 정도의 연산을 수행하면 시간 제한을 채우게 된다.
  • 5. Straight-forward problem TallPeople– SRM 208 Div 1: 사람들이 R행과 C열로 서있다. 문제는 2개의 특정한 키를 리턴 하는 것이다. 첫번째 수는 각 행마다 가장 키가 작은 사람들을 찾고, 그 중에 가장 키가 큰 사람의 키이다. (“tallest-of-the-shortest”) 두번째 수는 각 열마다 가장 키가 큰 사람들을 찾고, 그 중에 가장 키가 작은 사람의 키이다. (“shortest-of-the-tallest”) 간단한 탐색 문제이다. 정렬만 하면 된다.
  • 6. Breadth First Search (BFS) BFS를 사용하는 문제들은 대개 문제에 주어진 StartingPoint 부터 End Point까지 도달하는데 가장 작은 비용을 찾는 문제들이다. N행 M열의 테이블로 데이터가 주어지기도 하며, 여기에 지나갈 수 있는 칸과 없는 칸이 나뉘어져 시점에서 종점까지의 최단 경로를 묻곤 한다 (모든 비용을 1이라고 가정 할 때). 이런 테이블은 미로, 지도, 도시들, 그리고 다른 것들로 표현된다. 이러한 BFS 문제들은 시간 복잡도가 많은 경우에 linear(O(n)) 이므로, N또는 M이 높게 주어질 수 있다.
  • 7. Breadth First Search (BFS) SmartWordToy – SRM 233 Div 1: 소문자로 이루어진 단어가 주어진다. 당신은 한번의 click 만으로 어떤 문자를 이전이나 다음의 알파벳으로 바꿀 수 있다. (예를 들어, ‘c’는 ‘b’나 ‘d’로 바뀔 수 있다.) 알파벳을 둥글게 나열해서, ‘a’는 ‘z’가 될 수 있고, ‘z’는 ‘a’가 될 수 있다. 또 “X XXX” 형식의 금지어 형식이 입력되는데, 주어진 시작단어에서 끝 단어까지 이런 금지어를 나타내지 않고 갈 수 없다면 -1, 갈 수 있다면 최소의 click 수를 구하여 리턴 하라. (예를 들어, “lf a tc e”이 금지어의 형식으로써 “late”, “fate”, “lace”, “face” 의 금지어를 정의할 수 있다.) Word는 상태로써 생각될 수 있고, 최대 26^4개의 4개의 문자로 된 단어를 구성할 수 있다. 한상태에서 다른 상태로 가는 두 가지 방법이 존재하며, 비용은 항상 1이다. (A single click) 시작 상태에서 끝 상태까지 가는 최소 비용을 구해야 한다. -> 전형적인 BFS문제!
  • 8. Breadth First Search (BFS) CaptureThemAll – SRM 207 Div 2: 해리와 조는 마법 체스게임을 하고 있다. 그는 나이트 하나를 가지고 있고, 그의 상대편인 조는 하나의 퀸과 하나의 룩을 가지고 있다. 해리는 이번 턴에 “Haste”라는 주문을 외어서, 나이트를 여러 번 움직일 수 있다. 해리의 나이트가 최소 몇 번을 움직여야 퀸과 룩을 다 잡을 수 있는지 구하여라. 언뜻 보면 dynamic programming이나 backtracking 같아 보인다. 하지만 문제를 잘 읽어보면 BFS 문제라는 다음의 힌트들이 보인다. 테이블이 주어진다. 나이트는 점프를 하여근처의 여러 위치로 이동할 수 있다. 지금의 위치에서 다음의 위치로 가는데 비용이 1이다. (한번 움직인다.) 나이트의 최소 움직임을 구해야 한다.
  • 9. Flood Fill BFS를 이용해 모든 도착가능 지점을 찾는 기술이다. BFS와 다른 점은 최소 비용/경로가 요구되지 않는다는 것이다. 예를 들어, 1이면 못 지나가고 0이면 지나갈 수 있는 미로가 주어질 때, 출발점으로부터 갈 수 있는 모든 위치를 구하는 문제가 될 수 있다. Solution은 매우 간단하다 – 하나 씩 차례로 방문하고, 방문하지 않은 이웃 들을 방문한 목록을 저장하는 큐에 넣고, 차례대로 큐에서 하나씩 빼서 같은 작업을 수행한다. 이런 문제일 경우 DFS로는 Stack overflow가 일어나기 때문에사용하지 않는다.
  • 10. Flood Fill grafixMask – SRM 211 Div 1: 400 x 600 의비트맵이 주어지고, 몇 개의 사각형들이 비트맵의 특정 부분을 덮고 있다. (사각형들의 꼭지점은 정수로 주어진다.) 사각형들이 덮지 않은 부분에서 연결된 부분들의 넓이를 각각 구하라. 테이블이다. (Map) 특정한 포인트는 지나갈 수 없다. (사각형으로 덮힌 부분) 이어진 지역을 찾아야 한다. -> 쉽게 Flood Fill 문제라는 것을 알 수 있다.
  • 11. Brute Force and Backtracking Brute force에서 답의 lower bound를 가지고 pruning(가지치기) 한 것을 backtracking이라고 한다.둘 다 모든 가능한 경우를 찾고 최적을 찾거나 경우의 수를 찾는 것이 대부분이다. 범위가 작다는 것(N<=20 정도)이 문제의 힌트가 될 수 있다.
  • 12. Brute Force LargestCircle – SRM 212 Div 2: 몇 개의 사각형으로 표시된 영역이 있는 격자판이 주어진다. 격자판 위에 그릴 수 있는 가장 큰 원의 반지름을 찾아라. 원은 정사각형으로 표시된 영역을 지나가지 않아야 한다. 원의 중앙은 격자 위의 점이어야 하며, 반지름은 정수여야 한다. 격자의 크기는 최대 50이다. 가장 큰 힌트는 격자의 작은 사이즈이다. 이 문제는 모든 위치에서 주어진 규칙에 따라 원을 구해보는 것을 시도해 볼 수 있기 때문에 Brute Force로 문제를 푸는 것이 가능하다. 모든 원을 찾은 다음, 큰 것을 선택하면 된다. 최대 50x50 크기에 각 위치마다 최대 원의 개수는 25 개까지 시도해볼 수 있으며 잘 구현하면 선형 시간에 원이 지나가는 칸들을 하나씩 검사할 수 있다.
  • 13. Backtracking MNS – SRM 148 Div 1: 9개의 숫자가 있는 magic number square가 필요하다. Magic number square는 숫자가 각 행과 각 열의 합이 모두 같게 나열되어 있는 경우를 말한다. 0부터 9 범위 안의 숫자가 9개가 제시된다. 주어진 숫자로 만들 수 있는 서로 다른 Magic number square의 수를 구하여라. 하나 이상의 위치에서 다른 값을 가지면 다른 Magic number square라고 하자. 최대 9개의 작은 수의 숫자가 제시되고, 다른 방법으로 숫자를 나열하여 Magic number square를 찾아야 하므로, Backtracking문제의 특성을 가지고 있다. 모든 숫자들의 나열의 생각해 볼 수 있고, 해당 나열이 Magic number square의 특성을 가지는지 확인해 보고 맞으면 답에 더하면 된다.
  • 14. Dynamic Programming 꽤 많은 수의 문제들이 이 방법으로 풀 수 있다. 이 형식의 문제라고 찾아내는 것은 매우 중요한 일이다. 그것을 하기 위해서는 DP에 많은 경험이 필요하다. DP문제에서 제한은 너무 크지도, 너무 작지도 않아서, N^2나 N^3의 복잡도를 가진다. N이 너무 작다면 DP 문제가 아니다. 어떤 여러 개의 작은 상태에서 큰 상태로 가기 위한 방법이 존재하고, 큰 상태는 오직 작은 상태들에 의해서 결정된다. 자세한 내용은 다음주에!
  • 15. Maximum Flow 최대 유량 문제. 문제의 제한이, O(N^3) 이나O(N^4) 의 해법이 가능한 지를 본다. (500을 넘지 않고, 주로 100 이하이다.) 용량을 가진 그래프가 있거나, 문제의 데이터로 용량을 가진 그래프를 정의할 수 있어야 한다. 그리고 어떤 최대 값을 찾아야 한다.
  • 16. Maximum Flow Sample problem : 연결된 파이프의 리스트가 있고, 각 파이프의 최대 유량이 주어진다. 시작 지점에서 끝 지점까지 물이 흐른다고 할 때, 끝 지점에서 흐를 수 있는 최대 유량을 구하여라 . N<=100.
  • 17. Optimal Pair Matching Parking – SRM 236 Div 1 N 대의 자동차와 M개의 주차 공간이 사각형의 평면상에 주어지고, 차가 지나가지 못하는 벽이 존재한다. 각 자동차 마다 가장 짧은 거리를 이동해 주차를 시킨다고 할 때, 이동 거리 중 가장 큰 거리를 구하라. 하나의 주차공간에는 한 대의 자동차만 주차할 수 있다. s t 자동차 주차공간
  • 18. Q & A