본문 바로가기
카테고리 없음

회고록의 진행[생존 이야기]

by 덩얼이 2023. 8. 9.
반응형

알고리즘에 대하여

오늘은 알고리즘 카테고리를 열기전에 저번 포스팅에 있는 책에 대한 내용과 같이 회고를 하려고한다. 기초적인 내용이고 언어도 파이썬이지만 알고리즘에 대해서 기초적인 내용과 쉽게 그림으로 되어있어서 어떤게 알고리즘이라고 하는건지 알게되는 그러한 느낌의 책이였다.

이렇게 책을 보면서 알고리즘에 대해서 전반적인 개념을 다시 잡는 방식으로 읽으면서 필기를 간만에 하면서 정리하면서 보았었다. 그림과 글, 그리고 파이썬 코드로 이루어져 있기 때문에 어떤 알고리즘이 있는지에 대해서는 이해가 좋았던것 같다.

이런식으로 정리를 쭉하면서 알고리즘에 대해서 다시 생각해보는 시간을 가졌다. 그리고 내배캠에서 알고리즘 시트를 제공을 해주는데 프로그래머스에서 알고리즘을 풀이하는곳으로 이동할 수 있는 시트이다. 그래서 0레벨부터 다양하게 있는 알고리즘 시트를 따라가면서 문제를 풀이하고 학습을 할 수 있는 기회가 있다. 지금껏 많은 문제를 풀었지만 코드로써 진행되는 과정 자체는 아직은 말끔하게 이해하지 못하는 경향이 있어서 기초부터 쭉 나아가는것을 선택한것이다. 

알고리즘 문제를 풀다보니까 메모도 하고 그러면서 눈으로만 풀수 없다는것을 느끼게 되었고 필기를 하면서 푸는것이 어떤 로직을 쓸지에 대해서 알아가는 시간을 많이 가지고 있는것 같다. 

 

안드로이드 스튜디오에서 보이는 코드로 작성하면 애뮬레이터에 뜨는게 없기 때문에 알고리즘 코드로만 보고서는 쉽게 이해할 수 도 없는 노릇이다..계속 알고리즘을 풀다보면 멘탈도 나가고 그러지만 간간히 안드로이드도 만져주고 그러면 한층(?) 나아진다..

 

알고리즘을 풀면서 알아본것

알고리즘을 풀면서 알아낸것? 이미 알고 있었는데 까먹은점들과 개념들을 알아보자

StringBuilder 대하여 말을 할 수 있을것 같다.

이것은 2개 클래스의 공통점은 문자열 처리(삽입/삭제/수정) 기능을 제공하는 점입니다. 그리고, String이나 CharSequence보다 더 많은 갯수의 문자열을 다룰 수 있습니다. 2개 클래스의 가장 큰 차이점은 StringBuilder가 단일 스레드(single thread) 환경에서는 StringBuffer보다 속도가 빠릅니다. 반면, StringBuffer는 다중 스레드 환경에서 안전하게 사용할 수 있습니다. StringBuffer를 사용하면 각 개별 스레드에서 실행한 메서드 호출 순서와 일치하는 순서로 동기화되어 동작합니다.  즉, 각 개별 스레드가 동시에 StringBuffer에 접근해서 StringBuffer에 저장된 문자열을 처리(삽입/삭제/수정)할 수 있습니다. 동시(concurrent)라는 말은 단어 의미와 조금 다릅니다. 동시성은 동기화(synchronization)를 통해 우선 순위를 정하는 것입니다. 예들 들면, 식당에 여러 명이 동시에 자리에 앉아 식사할 수 있지만, 점심시간에 자리가 꽉 차면 먼저 온 순서에 따라 차례가 되었을 때 자리에 앉을 수 있는 거와 같습니다. StringBuffer가 StringBuilder보다 문자열 처리 성능이 느린 이유는 동기화 때문입니다. 

간단히 정리하면, StringBuilder는 주로 단일 스레드 환경(독립된 작업 환경)에서 빠른 문자열 처리를 할 때 주로 사용합니다. 반면 StringBuffer는 다중 스레드 환경에서 작업할 때 주로 사용합니다. 여기서는 StringBuffer 대신 StringBuilder를 사용합니다. 

  문자열을 삽입할 때는 insert()보다는 append() 사용하는 좋습니다. append() 자연스럽게 뒤에 추가하는 연산이기 때문입니다. insert() delete() replace()처럼 인덱스를 지정을 해줘야한다..

이러한 점을 알았지만 더욱 자세하게 알게되는 알고리즘 풀이였던것 같다. 다행이도 코틀린이라는것이 자바와 쌍둥이이고 느낌이 비슷하기 때문에 그나마...이해를 하고자 하면서 하는것 같다.

 

그리고 for 문을 이용을 하면서 내가 알고 있던 방식과는 다르게 컴퓨터가 알아듣기 쉽게하는게 알고리즘이기 때문에 더욱 이해를 해야할것같다.

indices 사용해 배열 해당 인덱스 번지 지정 for 출력 실시 이러한것도 알게 되었고 알고리즘을 풀면서 확실히 많이 찾아보고 이해하려는 내가 보이는것 같다.

반응형

 

알고리즘을 풀이하는 순서

내가 책을 읽고 찾아보면서 알고리즘을 풀때 생각해야하는것을 생각해 보았는데 이러하다.

 

 

문제이해 - 예제분석 - 문제분해 - 알고리즘 설계 - 슈도코드 - 코드작성 

 

이런식으로 작성을 하는것이 맞는것 같고 문제를 이해하는게 제일 큰 문제이기도 한것같다..내 생각엔 영어도 영어지만 한굴말로 되어있는게 왤케 이해하기 힘든건지...아무튼 이렇게 문제를 어찌어찌 해석하고 예제를 분석하며 출력문과 입력문을 보면서 분해하고 이해를 할 수 있는것 같다. 다음에는 마지막으로 개인 과제의 디자인이 어떻게 바뀌었는지, 그리고 알고리즘을 푸는 카테고리를 만들어서 알고리즘 풀이를 하면서 쭉 돌아 봐야 할것 같다. 오늘은 이만~

 

 

반응형