SW교육/알고리즘 4

고집센 개구리

고집센 개구리 아이가 아푸다. 나도 기분이 매우 다운된다. 게다가 잘 먹던 약도 안먹는다. 약을 안먹으니 열이 엄청나게 올라가고 있다.힘들다. 어째거나…오늘 아는 형님이 문제 하나를 보여줬는데 거기에 양교수님 성함이 들어있었다. 찾아 뵙지도 못하고 송구하기만 하다. 근데 문제가 은근히 재미있었다. 내 수준이 낮으니 재미있었다가 맞겠다. 일단 문제부터 보자. 문제 두 개구리 가족이 징검다리를 건너다 돌 하나를 사이에 두고 서로 마주쳤다. 좁은 징검다리여서 한 가족이 뒤로 돌아 나와서 비켜주어야 지나갈 수 있지만 개구리들은 고집이 세어서 서로 비켜주려하지 않는다. 어느 개구리도 뒤로 돌아가지 않고 가던 길을 계속 갈 수 있도록 하려면 어떻게 해야 하는가? 목표 최소의 움직임으로 왼쪽에 서 있던 개구리들을 오..

알고리즘 체험

실습1. 자연어 버블정렬2. 자연어 선택정렬3. 자연어 순차탐색4. 자연어 이분탐색5. 순서도 알고리즘 9단계6. 순서도 알고리즘 12단계7. 의사코드 알고리즘 19단계8. 의사코드 알고리즘 20단계 1. 소프트웨어 놀자 탈출모험기 9단계2. 소프트웨어 놀자 탈출모험기 12단계3. 소프트웨어 놀자 탈출모험기 19단계4. 소프트웨어 놀자 탈출모험기 20단계5. 로봇청소기 만들기

그래프에서의 인접행렬과 인접리스트

그래프의 탐색을 하기 위해서는 그래프 정보를 저장해야만 한다. 그래프의 저장 방법 2가지를 살펴보고, 실제 예제를 통해 어떻게 적용되는지 살펴보도록 하겠다. 위와 같은 그래프는 방향성과 가중치를 가지고 있다. 이 그래프를 2가지 방법으로 자료를 정리해 보자. 인접행렬 인접행렬의 경우 2차 배열을 생각하면 쉽다. 이 때 기본 규칙은 간단하다. 각 점을 기준으로 갈 수 있는 방향에 데이터를 저장하며, 갈 수 없다면, 특정한 값을 입력해 놓도록 한다.(기본적으로 0 혹은 -1을 사용한다.) 가중치가 없는 경우라면 0과 1로 표현이 가능하다. 또한, 고민해 보아야 할 것은 방향성을 갖지 않는 경우이다. 예를 들어 위의 예제 그래프의 경우 정점 1에서 2로 이동하는 경로는 1가지 이다. 하지만 방향성이 없는 경우..

배열을 대신하는 벡터

벡터 왠 뜬금없는 벡터에 대한 설명인지 하는 사람도 있을 것이다. 우리가 배열을 사용하면서 가장 많이 경험하는 것이 배열의 크기의 문제이다. 기존의 C 혹은 Cpp 에서 배열을 사용할 때 항상 크기의 문제가 우리의 발목을 잡게 된다. 또한 기존의 배열을 사용하게 되면 정보올림피아드 대회에서 문제에 따라서 배열의 크기를 매우 크게 잡기도 한다. 벡터를 사용하면 초기부터 메모리의 낭비를 줄일 수 있기 때문에 사용을 하기도 한다. 한 가지 중요한 점은. 그렇다고 해서 무분별하게 사용하면 오히려 독이 될 수 있음으로 신중하게 사용하도록 하자! (일반적인 경우 독이 되는 경우는 거의 없다.) (수정중입니다.)