# data[].attributes.headline
제목은 아래에서 고르기

# data[].attributes.subject
제목은 아래에서 고르기

# data[].attributes.body
[30000] 6.10. 자료구조 구현[팀별, 필수]

[30000] 6.17. 자료의 정렬[개별, 선택]

[30000] 6.18. 자료의 탐색[개별, 선택]

[30000] 6.24. 문제해결 프로젝트[개별, 선택]

# data[].attributes.body
1. 이 프로젝트에서 교과서를 참고해 전체 탐색 알고리즘에 대해 조사해 구글 클래스룸으로 자료를 만들었다.

2. 이 과제를 하면서 알고리즘의 작동원리나 알고리즘에도 다양한 종류가 있다는 것도 알게 되었다. 또 알고리즘을 이용한 코드를 만들어 프로그래밍에 대해서도 더 잘 알게 되었다.

3. 추가적으로 알고리즘을 이용한 사례에 대해 알고 싶고 거기에 쓰인 알고리즘이 무엇인지 원리는 어떻게 되는지 알고 싶다.

# data[].attributes.body
활동내용: 이번 발표에서는 ‘탐색’이라는 알고리즘적 개념을 중심으로, 전기전자공학 분야, 특히 디지털 회로 설계에서 탐색 알고리즘이 어떻게 활용되는지를 설명하고자 하였다. 이를 위해 먼저 탐색의 정의와 알고리즘의 개념을 정리하고, Finite State Machine(FSM) 설계나 논리식 간소화 과정에서 DFS, BFS 등의 탐색 알고리즘이 어떻게 사용되는지를 사례 중심으로 정리하였다. 발표 자료를 통해 논리 게이트 최적화, Don't Care 조건 처리 등 실제 회로 설계 시 고려해야 할 점들을 알고리즘 관점에서 조명하였다.

느낀점, 알게된점: 알고리즘은 단순히 소프트웨어 분야에서만 쓰이는 것이 아니라, 하드웨어 설계 등 공학 전반에서 중요한 사고 도구라는 점이 인상 깊었다. 특히 FSM이나 논리식 최적화에서 탐색적 사고가 요구된다는 점은 새로웠고, 전공 지식을 더 깊이 이해하는 데 도움이 되었다. 알고리즘을 실제 문제 해결에 적용하면서 단순히 이론이 아니라 실용적인 도구로 활용할 수 있음을 느꼈다탐색 알고리즘은 단순한 값 찾기를 넘어서 복잡한 상태 전이 분석, 회로 설계 최적화 등 다양한 공학적 문제 해결에 적용될 수 있음

Don't Care 조건을 활용한 회로 간소화 기법은 실질적인 전력 소비 및 설계 비용 절감에 기여함

FSM 설계와 같은 논리적 구조 설계에서 재귀적 사고, 그래프 탐색 알고리즘(DFS, BFS)이 활용됨

알고리즘적 사고는 소프트웨어뿐 아니라 하드웨어 설계 역량을 기르는 데에도 중요한 기반이 됨

알고싶은점: EDA(전자설계자동화) 툴에서의 알고리즘 적용 사례 및 최신 기술 동향

# data[].attributes.body
1. 자료 구조 구현에서 나는 '큐' 자료구조를 선택하였다. 큐는 자료 안에 값(정수 등)을 넣으면, 앞에서 넣은 것이 먼저 나오는, 선입 선출의 구조를 가진 자료형이다. 이는 어떠한 행동을 저장하고 이후 순차적으로 실행하는데에 큰 도움이 된다. 따라서 내가 만든 프로그램은 유니티나 UE와 비슷하게 유저 입력을 큐로 저장하여 최대한 처리 가능한 속도에 맞게 실행되도록 하는 기능이다.

2. 이 과제를 수행하면서 느낀 것은 개발자들이 겪는 문제에서 해결방법을 추론해 나가는 능력이 얼마나 중요한지이다. 컴퓨터 처리속도보다 빠른 유저 입력을 처리하기 위해, 엔진 새로고침 주기와 동기화되도록 큐를 사용하는 것은 기존 엔진의 문제를 해결하는 가장 안정적인 방법인 듯 하였고, 하드웨어 성능을 개선하는 것 뿐 아니라 다양한 방법으로 기기의 한계를 극복할 수 있다는 것 또한 알게 되었다.

3. 추가적으로 알고 싶은 내용은 큐가 다른 분야에서도 쓰이는지다. 게임에서 유저의 입력을 처리하는 것 뿐 아니라, SMS 프로그램에서 유저들의 메시지를 동기화하는 등에도 큐가 쓰일 것 같아, 이러한 부분에 대해 더 자세히 알고 싶다고 생각했다.

# data[].attributes.body
1. chat gpt 등의 생성형 ai를 이용하여 코드를 작성하고 구글 슬라이드를 이용하여 프레젠테이션을 만들었다.

2. 이 과제를 하며 알고리즘의 작동 원리에 대해서 깊게 이해할 수 있었고 여러 선택지 중 내가 고른 주제 만큼은 확실하게 이해할 수 있어 좋은 경험이 된 것 같다.

3. 이 알고리즘이 사용되는 다른 사례에 대해 조사하고 이 알고리즘을 세세하게 공부해 보고 싶다.

# data[].attributes.body
활동 내용.

비선형 전체 탐색 알고리즘을 사용해 패션분야와 프로그래밍을 접목시켜 논리적 알고리즘을 통해 소비자에게 추천 할 수 있는 스타일을 선정하고 보여주는 프로그램을 설계했다.

느낀점.

큰 사이트들에서 어떻게 클릭 몇번으로 스타일을 추천해줄 수 있지? 라는 생각을 하고 광고 또한 나한테 알맞는 알고리즘을 통해 구매 가능성 있는 제품을 선정해 보여주는 알고리즘이 어떻게 생성되는지 알게 되어 신기했다.

알고 싶은 내용.

앞으로 ai를 활용해 생성형 ai와 알고리즘의 접목으로 새로운 스타일을 ai가 생성해 추천 해줄 수 있는 기능이 있지 않을까 생각이 들었고 이에 대해 알고 싶어 졌다.

# data[].attributes.body
1. 게임 확률 시스템의 핵심 요소인 난수 생성기(random number generator)의 보안성과 공정성에 대한 문제를 주제로 선정하였다. Python의 기본 random 모듈은 메르센 트위스터 기반으로 고정된 시드 값이 있으면 예측 가능한 난수를 생성하므로, random.getstate()와 random.setstate()를 악용하면 가챠 결과를 완전히 재현할 수 있다. 이를 실험적으로 시뮬레이션한 뒤, 해결 방안으로 random.org의 진짜 난수 API를 도입해 하이브리드 시딩 전략을 구현했다. 이 방식은 외부의 비결정적 난수로 내부 의사난수기를 초기화해 예측 가능성을 차단하고, 성능과 보안성을 모두 확보한다.

2. 단순히 무작위로 보였던 Python 난수 시스템이 사실은 결정론적이며 내부 상태를 저장하고 복원할 수 있다는 점이 놀라웠다. 특히, 게임 개발자가 시드와 상태 정보에 대한 보안에 신경 쓰지 않으면 치명적인 확률 조작이 가능하다는 점에서, 게임 내 경제 시스템 전체를 위협할 수 있음을 실감했다. 반면 random.org와 같은 외부 난수 API는 진정한 비결정성을 제공하므로, 서버 시딩 전략에 활용하면 높은 신뢰도의 확률 시스템을 구축할 수 있다는 점도 배웠다. 공정한 게임 시스템 설계를 위해 개발자 입장에서 고려해야 할 보안 요소의 중요성을 깊이 체감했다

3. 앞으로는 random.org와 같은 외부 시드 소스를 정기적으로 통합하는 서버 구조를 직접 설계해보고 싶다. 게임 개발자를 희망하는 입장으로써 기술 부채가 발생하지 않도록 공정하고 신뢰가는 시스템을 구축할 수 있는 능력을 기르고 싶다.

# data[].attributes.body
1. 이번 활동에서는 관계 기반 알고리즘을 활용한 프로그램을 직접 만들어보았다. 관계 기반 알고리즘은 사람이나 사물 간의 연결 관계를 바탕으로 정보를 분석하거나 추천하는 방식으로, 친구 추천, 콘텐츠 추천 등에 널리 활용된다. 나는 이 알고리즘의 기본 원리를 이해하고, 간단한 코드로 구현하여 특정 조건에서 어떤 관계가 형성되고 추천이 이루어지는지를 확인해보았다. 이 과정에서 프로그램의 입력과 출력 구조를 설계하고, 연결 관계를 저장하는 방식에 대해 고민하며 알고리즘의 작동 원리를 체험적으로 익힐 수 있었다.

2. 활동을 하면서 관계 기반 알고리즘이 단순한 수학적 계산이 아니라, 실제 사람들의 행동 패턴이나 선택을 분석하는 데 매우 효과적이라는 점을 알게 되었다. 특히 프로그램을 만드는 과정에서 관계도를 코드로 표현하는 것이 쉽지 않았지만, 결과적으로 구조화된 데이터를 분석하고 처리하는 능력이 길러졌다고 느꼈다.

3. 앞으로는 이러한 알고리즘이 실제 서비스에 어떻게 적용되는지 더 깊이 탐구하고, 보다 복잡한 관계 네트워크를 시각화하거나 예측할 수 있는 프로그램을 직접 만들어보고 싶다. 나아가 그래프 이론과 결합된 알고리즘 학습을 통해 추천 시스템의 구조를 더 체계적으로 이해해볼 계획이다.

# data[].attributes.body
1. 자료구조 구현 프로젝트에서 선형자료구조와 비선형자료구조를 정리하고 비선형 자료구조 중 한 가지를 선택해 조사하고 chat gpt와 구글 클래스룸과 DEVC++로 그에 관한 프로그램을 만들었다.

2. 이 과제를 하면서 선형자료구조와 비선형자료구조가 무엇인지 알게 되었고 비선형자료구조를 이용한 실생활 사례에는 무엇인지 알게 되었다.

3. 추가적으로 비선형자료구조에서 선택한 것 외에 다른 것은 무엇이 있는지 찾아보고 싶고 비선형자료구조를 이용해서 더 다양한 곳에 쓰일 수 없는지도 알아보고 싶다.

# data[].attributes.body
1. 이번 활동에서는 관계 기반 알고리즘의 개념을 이해하고, 이를 실제 프로그램으로 구현하는 작업을 수행하였다. 관계 기반 알고리즘은 사용자나 객체 간의 관계를 기반으로 추천을 하거나 연결 구조를 분석하는 방식으로, 다양한 서비스에서 활용되고 있다. 나는 이러한 알고리즘의 작동 방식을 직접 구현해보면서, 조건에 따라 추천이 어떻게 달라지는지 실험하고, 관계도에 따른 출력 결과를 분석해보았다.

2. 활동을 하면서 단순히 데이터를 입력하고 출력하는 것보다, 관계 자체를 어떻게 데이터 구조로 표현하고 처리하는지가 중요하다는 점을 느꼈다. 특히 친구 추천이나 유튜브 추천처럼 일상에서 자주 접하는 기술들이 이와 같은 알고리즘에 의해 작동된다는 사실이 인상 깊었다. 또한, 직접 프로그램을 만들어보는 과정을 통해 논리적 사고와 구조화 능력이 크게 향상된 것 같아 뿌듯함을 느꼈다.

3. 앞으로는 더 복잡한 관계 구조를 다룰 수 있도록 알고리즘을 확장해보고, 추천 방식의 정확도나 효율성을 높이는 다양한 방법들에 대해서도 탐구해보고 싶다. 또한 실제 추천 시스템에서 활용되는 그래프 기반 모델이나 머신러닝 기법과의 연계성도 더 깊이 알아보고자 한다.

# data[].attributes.body
1. 비선형 자료 구조 표현에서 나는 트리 자료구조를 선택하였다. 트리는 계층적 관계 표현하는데 사용된다. 트리 구조에서 데이터는 노드(Node)로 표현되며, 각 노드 사이에는 부모-자식 관계가 형성된다. 트리의 가장 상위 노드를루트라고 하며, 이를 통해 다양한 하위 노드가 연결된다. 게임 엔진(Unity, Unreal 등)에서는 씬(Scene) 내부의 오브젝트들을 트리 구조로 관리한다. 따라서 내가 만든 프로그램은 상술한 사례와 비슷하게 루트 오브젝트가 존재하며, 여러 개의 자식 오브젝트가 계층적으로 연결되는 것을 보여준다.

2. 이 과제를 수행하면서 느낀 것은 기존의 스켈레톤 트리를 게임엔진에서 활용하는 것은 이미 해보았지만 이걸 직접 구현하면서 트리구조에 대한 더욱 깊은 이해를 할 수가 있었고 이는 게임개발에 대한 유의미한 조언이 되었다. 이번 활동을 통해 알게 된 점으론 어째서 이러한 게임엔진에서는 왜 개발자들이 캐릭터의 스켈레톤을 하필 트리구조를 이용하여 구현하였는지 궁금하였는데 트리구조의 원리와 개념을 알아보며 이를 이해할 수 있었다.

3. 이번 활동에서는 그저 트리구조의 간단한 구조만 코드로 보여주었을 뿐이지만 나중에는 이를 통해 실제 게임 엔진처럼 트리구조 알고리즘을 스켈레톤 트리를 구현하는 코딩을 해보고 싶다.

# data[].attributes.body
1. 활동 내용 요약

이 프로젝트는 2D 포물선 운동과 충돌을 시뮬레이션하는 프로그램을 개발하는 것이었습니다. 처음에는 정보과학 교과서의 예제 코드를 참고해 Dev C++ 환경에서 <graphics.h> 라이브러리를 이용해 구현을 시도했으나, 라이브러리 호환성 문제로 실패했습니다. 이후 Visual Studio의 "Windows API 데스크톱 애플리케이션" 프로젝트 유형을 사용하여, 윈도우 창에서 실시간으로 포물선 운동을 시각화하는데 성공했습니다. 프로그램은 각도, 속도, 중력, 반발계수 등 물리 파라미터를 입력받아, 투사체의 궤적과 충돌 후 반동까지 실제 물리 법칙에 맞게 그려줍니다. 사용자는 방향키와 스페이스바, R키를 통해 시뮬레이션을 조작할 수 있습니다.

2. 프로젝트를 통해 느낀 점 및 새롭게 알게 된 사실

실제 게임 개발에서 포물선 운동과 충돌 시뮬레이션이 얼마나 중요한지 체감할 수 있었습니다. 물리 기반 움직임(예: 점프, 총알, 공 튀기기 등)은 다양한 게임 장르에서 핵심 요소임을 알게 되었습니다.

단순히 코드를 작성하는 것뿐 아니라, 개발 환경(IDE, 라이브러리 호환성 등)과 도구의 선택이 프로젝트의 성공에 큰 영향을 미친다는 점을 경험했습니다.

Windows API와 그래픽 라이브러리를 직접 다뤄보면서, 저수준에서 그래픽을 제어하는 원리와 구조, 그리고 실시간 시뮬레이션을 위한 메시지 루프 및 타이머 활용법 등 실제 소프트웨어 엔지니어링의 기초를 익혔습니다.

실패를 겪고 환경을 바꿔 재도전한 경험을 통해, 문제 해결력과 적응력의 중요성을 새삼 깨달았습니다.

3. 추가적으로 알고 싶은 내용이나 후속 활동 계획

실제 게임 엔진(OpenGL, Unreal Engine, Unity 등)에서 포물선 운동 및 충돌 물리 구현 방식을 더 깊이 탐구하고 싶습니다.

반발계수, 공기저항 등 다양한 물리 파라미터를 조정하여, 현실과 유사한 더욱 정교한 시뮬레이션을 만들어보고 싶습니다.

# data[].attributes.headline
제목은 [30000] 날짜 프로젝트 주제 형식으로 작성

# data[].attributes.subject
제목은 [30000] 날짜 프로젝트 주제 형식으로 작성

# data[].attributes.body
1. 선택한 주제를 나타내는 이미지를 하나 추가하고 활동 내용을 간단히 요약하세요.(활용했던 생성형 AI나 DEVC++, 캔바, 구글 슬라이드, 패들렛 등 활용한 AI, 에듀테크 도구를 포함해서 작성)

2. 과제를 수행하면서 느낀 점, 새롭게 알게 된 사실을 작성하세요.

3. 추가적으로 알고 싶은 내용이나 후속 활동 계획을 작성하세요.

# data[].attributes.body
1. 교과서를 참고하여 자료구조의 구현 방법 중 트리의 방식을 탐구하여 캔바로 자료를 만들었다.

2. 이 과제를 하며 이진트리의 루트 노드를 제외한 다른 n 번 노드의 부모 노드가 ⌈n/2⌉ 번째 노드라는 것을 알아내었다.

3. 주기적으로 트리의 다른 형태(스레드 이진트리 등)와 다른 자료구조의 구현 방식을 탐구하고 싶다.

# data[].attributes.body
1. 프로그램에서 빠질 수 없는 재귀의 정의와 재귀를 사용하는 이유 그리고 재귀의 단점에 대하여 교과서, gpt를 통하여 조사하였고, DEV++로 코드를 작성하고, 캔바로 발표 자료를 만들었다.

2. 재귀는 만능이라 생각했지만 어느 때에는 고전적인 방법이 더 효율적일 때도 있었고 오히려 재귀가 프로그램에 방해가 되는 일도 있었다. 이를 통하여 만능 따위는 없고 상황에 따른 유연한 선택이 중요하다는 것을 깨달았다

3. 재귀에 대하여 프로그램 뿐만이 아닌 수학적, 철학적으로 들어가 보고도 싶다.

# data[].attributes.body
1. 팀별로 자료구조를 구현하는 활동에서 나는 스택에 대해 탐구하고 관련 코드를 챗피티를 이용해 구현하고 canva를 이용해 ppt를 만들어 발표했다.

2. 수업시간에 처음 배울 때는 이해가 쉽게 가지 않았었는데 이번 탐구를 하는 과정에서 천천히 그 부분을 읽어보며 직접 작성도 해보며 스택의 원리와 구현 방법에 대해 이해할 수 있었다. 다른 코드들도 지금은 규칙성도 보이지 않고 무작위로 매우 복잡하게 느껴지지만 천천히 다시 탐구해보면 다 이해하고 자유자제로 쓸 수 있을 것 같은 느낌이 든다.

3. 추가적으로 내가 담담했던 스택이 아닌 다른 트리같은 자료구조를 탐구해보고 싶고, 다른 이해가 가지 않았던 함수파트를 다시 천천히 탐구해보고 싶다.

# data[].attributes.body
물류최적화에서 사용되는 알고리즘에 대해서 1학년 때 심화 탐구했었던 유전 알고리즘(GA)과 분기한정 알고리즘(BBA) 중 어떤 상황에서 어떤 것이 더 효율적인지 비교하여 각각의 원리와 효율성, 현실적 적용 가능성을 정리했다.

이를 통해 같은 물류 최적화 문제라도 접근 방법에 따라 해결 과정과 결과가 크게 달라질 수 있다는 점을 깨닫게 되었다. 처음에 두 알고리즘 모두 같은 '최적경로를 찾는 도구'정도로 생각했지만 일대일로 비교해보니 두 알고리즘의 특징은 명확하게 달랐고 사용하는 가장 좋은 상황도 달랐다는 점이 매우 흥미로웠다. 예를 들어 복잡하고 대규모인 물류 문제에서는 완벽함(BBA)보다 효율적인 절충(GA)가 더 필요하다. 이번 과제를 수행하면서 '물류최적화에 사용되기에 좋다'와 '알고리즘이다'라는 공통점이 있음에도 그 안의 차이점을 면밀히 비교하여 가장 좋은 답을 찾아낸 것처럼 앞으로도 이런 사고방식을 통해 다양한 문제를 바라보고 해결하는 능력을 발전시켜 나가고 싶다.

'개미 군집 최적화 (Ant Colony Optimization, ACO)', '시뮬레이티드 어닐링 (Simulated Annealing)', '제약 만족 문제 (Constraint Satisfaction Problem, CSP) 기반 해법' 과 같은 물류최적화에 사용되는 GA나 BBA외의 다른 알고리즘도 탐구해보고 싶다

# data[].attributes.body
활동내용

이번 수행평가에서 ‘자료 정렬 방식과 DFS 알고리즘’을 조사하고 직접 구현했습니다.

느낀점,알게된점

DFS는 생각보다 간단한 알고리즘이지만, 재귀와 백트래킹 구조를 이해하는 것이 중요하다는 것을 알게 되었습니다. 직접 코드를 짜면서 재귀 함수가 호출되는 순서와 반환되는 구조를 명확히 이해하게 되었습니다.

정렬 알고리즘은 단순한 문제 같지만, 입력 데이터 크기에 따라 효율성이 크게 달라진다는 점에서 중요성을 느꼈습니다. 시간 복잡도를 비교하면서 O(n²)과 O(n log n)의 차이를 체감할 수 있었습니다.

Canva와 Slides 같은 도구를 활용해 발표 자료를 만들면서 정보를 시각화하고 효과적으로 전달하는 방법도 함께 배울 수 있었습니다.

ChatGPT를 활용해 실시간으로 코드 오류를 수정하고 개념을 빠르게 정리할 수 있어 학습의 효율이 크게 향상되었습니다.

🔹 추가적으로 알고 싶은 내용 및 후속 활동 계획

DFS와 BFS의 차이를 좀 더 자세히 비교하고 싶습니다. 예를 들어 미로 찾기, 소셜 네트워크 탐색 등 실제 문제에서 어떤 상황에 어떤 알고리즘을 쓰는 것이 더 효율적인지 알아보고 싶습니다.

정렬 알고리즘 중 고급 정렬(퀵 정렬, 병합 정렬 등)도 더 깊이 공부해보고 싶습니다. 이를 통해 효율적인 코드 작성 능력을 키우고자 합니다.

C++ 외에도 Python이나 JavaScript 등 다른 언어에서도 동일한 알고리즘을 구현해보며 언어 간 문법과 구조 차이도 익히고 싶습니다.

팀 프로젝트로 그래프 탐색을 활용한 간단한 게임을 만들어보는 것도 도전하고 싶습니다. 예: 미로 탈출, 퍼즐 탐색 게임 등

필요하다면 이 내용을 기반으로 Google Slides 발표용 구성이나 Canva 포스터 디자인도 함께 도와드릴 수 있습니다.
추가로 보고서 형식(한글, 워드 등)으로도 변환 가능합니다. 원하시면 말씀해주세요!

ChatGPT에게 묻기

# data[].attributes.body
1.자료 구조를 선형 구조, 비선형 구조로 분류하고 각각의 특징과 예시를 정리했다.

Dev-C++로 간단한 코드를 작성해 자료 구조의 동작 방식을 실습했다.

ChatGPT를 활용하여 자료 구조의 정의 및 실제 코드 예제를 빠르게 참고하고 이해도를 높였다.

2.느낀 점으로는 다양한 자료 구조들이 실제 프로그래밍에서 어떻게 사용되는지 구체적으로 이해할 수 있었다.

또한 스택과 큐는 자료 구조 개념만 알고 있었는데, 직접 구현하면서 그 동작 방식과 사용 예를 체감할 수 있었다.

3.추가적으로 할 수 있는 활동으로는 팀 프로젝트로 간단한 자료구조 시뮬레이터를 Unity 등으로 제작해볼 수도 있을 것 같다.

# data[].attributes.body
1. AI가 활용되는 알고리즘에 대해 canva로 ppt로 만들고 발표했다. 그중 AI가 활용되는 선형탐색에 대해 조사하고 챗 지피티를 활용해 관련 코드를 구현했다.

2. 알고리즘에 AI가 활용된다면 단순 AI가 이를 활용하기만 할 줄 알았으나 사실 알고리즘이 AI를 구성하는 과정에서 깊게 연관되어있음을 알게되었다. 또 딥러닝등 AI를 개발하고 구성하는데 빠질 수 없는 필수적인 알고리즘이 있다는 것도 알게 되었다. 또 AI가 이를 활용하기도 해서 앞으로 AI의 중요성이 지금보다도 더욱 커질 것임을 느낄 수 있었다.

3. 추후 AI를 구성하고 개발하는데 이용되는 것에 대해 알아보고 싶다. AI를 제대로 활용하는데 있어 AI가 어떻게 구성되고 어떻게 만들어졌는지 아는 것은 매우 중요하다고 생각한다. 그래서 이에 대해 탐구해보고 싶다.

# data[].attributes.body
너비우선탐색(BFS)의 특징과 작동원리를 체계적으로 설명하고 프로그래밍 구현을 통해 활동을 마무리했다. BFS가 특히 최적화 알고리즘을 구현시키는 것에 매우 적합하다는 점을 주목하여 '지하철 경로 추천 문제'를 프로그래밍으로 구현하고자 했다.

이번 활동에서는 역과 노선의 개수를 사용자로부터 입력받고, 각 노선에 포함된 역들의 정보를 바탕으로 출발역에서 도착역까지 이동할 때 최소 환승 횟수를 구하는 프로그램을 구현했습니다. 단순히 입력을 처리하고 결과를 도출하는 수준을 넘어, 이를 통해 우리가 일상적으로 사용하는 대중교통 애플리케이션 역시 이러한 알고리즘적 기반 위에서 작동한다는 점을 이해할 수 있었습니다. 특히 이번 경험을 통해 최소 환승 경로 탐색이라는 실생활 문제를 너비 우선 탐색(Breadth-First Search, BFS) 알고리즘으로 효과적으로 해결할 수 있음을 체감하며, BFS의 원리와 응용 방식에 대해 보다 깊이 있는 통찰을 얻는 계기가 되었습니다. 이러한 과정은 단순한 프로그래밍 실습을 넘어서, 실제 서비스에 적용 가능한 알고리즘 설계와 구현의 중요성을 인식하는 값진 시간으로 이어졌습니다.

# data[].attributes.body
1. 이번 과제에서는 힙 정렬 알고리즘을 주제로 선정하여, 이를 직접 DEVC++을 통해 구현하였다. 힙 정렬은 이진 힙 구조를 이용해 정렬을 수행하는 알고리즘으로, 시간 복잡도가 O(n log n)으로 안정적인 성능을 보이는 특징이 있습니다.

2. 힙 정렬은 단순히 정렬하는 알고리즘이 아니라, 이진 힙(최대 힙/최소 힙)이라는 자료구조 개념을 먼저 이해해야만 구현이 가능하다는 점에서 도전적이었다.
직접 구현하면서 힙의 삽입, 삭제, 재정렬 과정이 정렬과 직결된다는 점을 새롭게 알게 되었고, 정렬 알고리즘이 단지 숫자만 비교하는 것이 아니라 자료구조와 긴밀히 연결되어 있다는 사실을 깨달을 수 있었다.또한 배열을 이용해 힙을 구현하는 방식이 매우 효율적이라는 점도 인상 깊었다.

3. 유전체 서열 분석이나 단백질 구조 예측처럼 방대한 생물 데이터를 다룰 때, 우선순위를 기준으로 데이터를 정렬하거나 빠르게 검색하는 작업이 필요하다. 이때 힙 정렬이나 힙 기반 우선순위 큐가 어떻게 활용되는지 궁금하다.

# data[].attributes.body
1. 문제해결 프로젝트에서는 동적 계획법을 활용한 프로그램을 직접 만들었다. 동적 계획법은 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법으로, LCS 알고리즘이 있다. 이는 두 문자열의 공통 부분 수열 중 가장 긴 것을 찾는 알고리즘이다. LCS의 부분 반복 문제와 최적 부분 구조에 대해 알아본 후 이 기본 원리를 이해하고,간단한 코드를 구현하여 최장 공통 부분 수열의 길이를 설정하는 프로그램을 구현했다.이후 동적계획법을 활용한 사례를 조사하고 생물정보학에서 단백질 정보 구조 예측에 있어서의 알고리즘의 활용을 설명하고자 하였다.

2. 이번 탐구를 통해 단백질의 1차 서열(아미노산 서열)이 어떻게 3차원 구조로 접히는지를 예측하는 것이 생물정보학 분야에서 매우 중요한 문제라는 것을 알게 되었고, 동적계획법이 최적의 서열 정렬이나 RNA 2차 구조 예측 등에 널리 사용된다는 점이 인상 깊었다.

또한, 이처럼 복잡한 생물학적 문제를 수학적 알고리즘으로 해결할 수 있다는 사실이 흥미로웠고, AI 기술과의 결합 가능성에 대해서도 많은 호기심이 생겼다.

3. AlphaFold 같은 최신 AI 모델은 어떻게 단백질 구조를 예측하는지, 동적계획법 외에 어떤 알고리즘이 단백질 접힘 문제 해결에 사용되는지와 실제 생명과학 분야에서는 이러한 계산 모델이 어떻게 활용되고 있는지 등 단백질 구조 예측에 알고리즘(동적계획법)을 활용하는 방법에 대해 추가 탐구해보고 싶다.

# data[].attributes.body
1. 이번 과제에서 힙 정렬 알고리즘에 대해서 알아보고 조사해보았고, 이를 DEVC++을 통해서 힙 정렬을 이용한 예시 코드를 만들어보았다.

2. 활동을 하면서 힙 정렬이 무엇인지와 어떤 방식으로 정렬할 수 있는지를 알게 되었다. 또한 사용자에게 정렬할 숫자의 개수를 입력 받고 배열에 정수 입력 후 힙 정렬을 실행하면서 정렬된 결과를 출력해보는 것을 경험해보면서 다음에도 힙 정렬을 잘 이용할 수 있는 기회까지 얻을 수 있게 되었다.

3. 힙 정렬 이외에도 다른 정렬에 대해서 알아보고 싶다.

# data[].attributes.body
1. DFS의 구조와 동작 원리에 대해 조사하고 DEV-C++를 이용해 직접 구현해보았다. 이를 이해하기 위해 다양한 예제 입력에 대해 탐색 순서를 출력해보기도 했다.

2. DFS는 전에 했던 것들보다는 간단한 구조 같아보이지만, 구현할 때는 재귀 호출의 흐름과 방문 여부 관리가 중요하다는 점을 알게 되었다. 특히 재귀 함수의 호출 스택이 마치 스택 자료 구조처럼 작동한다는 점에서 자료구조 수업에서 배운 내용을 연결지을 수 있었다.

3. DFS가 실제로 사용되는 실생활 예시에는 어떤 것이 있는지 알고 싶고, 이를 간단하게나마 구현해보고 싶다.