누구에게나 처음은 있다.

어찌 저찌 뭔가 배웠고 그걸 연습할 수 있는 사이트를 알게 되었습니다.
코딩 테스트를 할수 있는

프로그래머스
https://programmers.co.kr/
백준
https://www.acmicpc.net/

2개의 사이트를 알게 되었고 그 중 프로그래머스가 초보자가 하기 쉽게 설계되어 있어서 레벨 0~1사이의 문제를 연습했습니다.

아무래도 알고 있는 테크닉이 적어서 거의 대부분 if 나 for문으로 처리를 했고 한계를 느낄 때쯤 코딩테스트라는 과목이 이번 UpstageAILab에 있더라고요.

3일의 과정 짧은 과정이었지만 의미있는 시간이었습니다.

1일차

코딩을 할 때 필요한 테크닉이 있고 이를 활용해서 코딩에 필요한 시간과 메모리내에서 해결해야 한다는 것을 1일차에 알게되었습니다. 사실 지금까지는 그런거 신경 안써도 풀리는 문제들이었고 그런 난이도 였기에 처음 알게 되었습니다.

완전 탐색

아무래도 제가 하던 방식이었죠. 그냥 모조리 돌려서 결과가 나오게 하는 것. for문으로 처리하면 가장 큰 장점은 딱히 생각하지 않아도 풀린다는 점이 제게는 가장 와닿았습니다.

재귀

처음엔 뭔 이상한 방식이라 생각했습니다. 다시 자기자신을 호출한다니 무슨 생각으로 이런 코딩이 있을까 했는데 생각해보니 원래 공학에서도 이런 식으로 문제를 해결하는 것이 있었습니다. 그게 코드로 드러난 것이라 생각해보니 좀더 이해하기가 쉬웠습니다.

조합, 순열, 부분집합

컴퓨터 공학에 수학이 연결점이 많다고는 알고 있었지만 이런 식으로 쓰일수도 있구나 배우게 된 방식이었습니다. 실제 조합과 순열을 구현한 함수가 있긴 하지만 실제 코테에서 사용하지 못하게 될 경우도 있으니 하는 방식에 대해 알려주고 함수로 해당 문제를 해결하는 2가지 방식을 배웠습니다.

2일차

큐(queue)

큐는 우리가 흔히 말하는 선입선출방식입니다. 먼저 들어왔으니 먼저 나간다는 방식으로 예시로는 줄서기, 프린트, 예약하기 등이 있습니다.

스택(stack)

스택은 후입선출 방식으로 익숙하지 않은 방식이지만 강사님 설명은 프링글스를 예로 들었습니다. 먼저 들어간 프링글스는 나중에 먹게 되는게 당연하겠죠? 그러니까 이해가 갔습니다. 예시로는 괄효 유효성 문제, 짝 맞추기가 있습니다.

위 두가지 방식 중 문제에 따라 맞는 방식을 고르는 건 제가 배워야 할 내용이겠죠.

그래프

그래프는 제가 알고 있던 그런 표나 박스 그래프를 말하는 게 아니었습니다. 관계도에 좀더 가까운 개념이었습니다. 여기서 배운 2가지 개념이 있었는데 DFS와 BFS였습니다.

DFS

Depth First Search, 줄여서 DFS로 말하는 탐색 방식으로 그래프의 모든 점을 방문하는 방식중 하나로 한점에서 시작해서 한방향으로 계속 진행해 끝에 도달하면 그이전 지점에서 다시 탐색을 시작하는 방식으로 방문했던 지점은 미리 표시를 하는 방식으로 다시 방문하지 않는 점이 특징입니다.

BFS

Breadth First Search, 줄여서 BFS로 말하는 탐식방식으로 한 지점에서 시작할 때 갈 수 있는 모든 방향으로 진행하면서 방문했다는 표시를 하고 그 모든 지점에서 모든 방향으로 다시 진행하며 이미 방문했다는 표시가 있다는 지점을 제외한 모든 지점으로 진행이 이루어 집니다.

두 단어가 하필 D랑 B로 시작하고 FS까지 같아서 좀 헷갈리는 면이 있었는데 이 개념을 익히고 능숙하게 써먹는데는 더 많은 시간이 필요할 것 같습니다.

3일차

암시적 그래프

그래프라고 말하지는 않았고 그림도 없지만 개념적으로 그래프로 해석해서 코딩을 할 수 있는 문제를 의미합니다. 그래프로 해석이 가능하면 DFS, BFS의 방식으로 문제를 풀 수 있고 이를 연습하는 시간을 가졌습니다.

후일담

대학교 1학년 때 배운 C언어가 전부였던 제가 용케 지금까지 비볐나 생각해봤습니다. 배우지 않은 개념이었던 완전 탐색을 본능적으로 적용하고 있더군요. 아무래도 PLC를 배우면서 모든 경우의 수를 생각하는 버릇이 들어서 제대로 배우는 건 처음인 코딩으로 용케 지금까지 버틸 수 있었다 생각했습니다. 이제 좀 더 잘드는 칼을 가지게 되었으니 무식하게 일자로만 써는게 아닌 꽃무늬라던가 구름무늬라던가... 좀더 코드를 꾸미고 효율적으로 문제를 접근해 갈 수 있지 않을까 생각합니다.

0개의 댓글