본문 바로가기

Problem Solving/나의 생각

(3)
코드와 선형 구조에 대한 생각 코드를 보면 줄바꿈과 인덴트가 있다. 줄바꿈은 무엇일까? 명령과 명령 간의 분리를 뜻하기도 하고, 줄 번호에 따라서 실행 순서를 뜻하기도 한다. (비동기 처리는 일단은 논외로 한다.) 아마도 마지막에 line break가 있는지를 보고 줄바꿈을 파악할 것이다. 하지만 이렇게만 쓴다면 '갈래' 또는 '영역'을 표현할 수 없다. 순차적으로 실행되는 명령 리스트만 적을 수 있을 것이다. 왼쪽의 그림을 보자. 저런 식으로 조건에 따른 갈래가 생긴다면 코드상에서 v>1? v=5 v=0 이런식으로 쓸 수 없다. 이제 이를 표현하기 위해 뭔가 새로운 표현법이 필요해진 것이다. 하지만 코드를 쓰는 공간에서는 그림을 그리는 것이 아니고 텍스트기에 뭔가 아이디어가 필요하다. 그것을 해결해주는 것이 바로 인덴트인 것이다. ..
LeetCode 알고리즘 PS에 대한 생각 릿코드(리트코드, LeetCode)에도 많은 문제들이 있고, 특히 해외에서는 상당히 보편적으로 사용하는 플랫폼으로 알고 있다. 릿코드의 시스템에도 장단점이 있는데 몇가지만 짚어보면, 문제를 틀렸을 경우, 어떤 테케에서 틀렸는지 공개된다. 이 점은 시간단축의 효과(장점)가 있다. 어디서 잘못했는지 금방 알 수 있다. 때때로 정말 작은 실수때문에 며칠이 걸리기도 한다. 그런 실수, 그런 코너케이스까지 생각해내야 하는 것도 맞지만 그것으로 너무 많은 시간을 뺏기는 것도 문제가 있다. 실제로 개발자들이 코드리뷰, 페어 프로그래밍 등의 방식을 고안하고 적용하는 것도 이러한 문제를 해결하기 위함이 아닌가? 하지만 동시에 이것은 단점도 된다. 스스로 생각해내는 기회를 앗아가기 때문이다. 필자도 (요새 이 '필자'라는..
기계적인 풀이, 정형화된 틀 -> PS는 암기? * ps = problem solving (알고리즘 문제풀이를 일컫는다.) 가끔 어떤 문제가 어떤 알고리즘 문제로 분류되는지를 파악하지 못할 때가 종종 있다. 풀 수는 있는데, 이게 무슨 풀이인지를 본인도 잘 모르겠는 것이다. 그것은 아마도 필자가 어떤 정형화된 틀이 갖춰져 있지 않음이기도 하다. 장단점이 있겠지만, 일단 생각나는 단점은 빠른 풀이가 조금 힘들 때가 있다. 척하면 팍하고 나와야 하는 코드가 바로바로 나오지 않아서 처음부터 다시 생각해야 하기 때문이다. 마치 DP에서 이전 값을 바로 참조하여 바로 현재의 값을 구하는 것처럼 빠르게 풀이가 되어야 하는데, DP[0] 또는 DP[1]부터 다시 생각해서 쌓아 올려야 할 때가 있기 때문이다. 물론 거듭된 연습으로 익숙한 형식들은 빠르게 풀겠지만, ..