일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Frame rate
- 3-sigma rule
- Phase Lock
- ApolloAuto
- Smart Pointer
- Interference Pattern
- Motion compensate
- Coding Test
- PointCloud Frame
- Data Packet
- Alpha Prime
- timestamp
- PointCloud
- Alpha Prime(VLS-128)
- nvidia
- Reflectivity
- PYTHON
- VLS-128
- lidar
- object detection
- Veloview
- Phase Offset
- Data Race
- Quaternion 연산
- Azimuth
- Multi threaded
- coordinate system
- Single threaded
- 센서셋
- HDmap
- Today
- Total
엔지니어 동행하기
의사코드(pseudo-code) 작성 규칙과 예제 본문
제한된 시간 내에 빠르고, 오류 없는 풀이를 하기 위해서는 반드시 의사 코드(pseudo-code)를 작성하는 연습을 해야 합니다. 실제 문제는 다음과 같은 단계로 풀게 됩니다.
Step 1. 문제 정독, 상황 구체화
Step 2. Code Logic에 집중하여 의사코드 작성
Step 3. 예외 Case를 고려하여 코드 구현
Step 4. Test Case로 Debugging
의사코드 작성 규칙
1) 한 줄에 '하나의 동작을 나타내는 명령' 작성
실제 코드를 작성하는 방식과 같이 작성하는 것을 의미합니다. 개발하는 스타일에 따라 달라질 수 있는 부분이며, 한 줄에는 하나의 동작을 실행하는 코드만을 작성하길 권장합니다.
2) 어떤 동작을 하는 코드인지 의미를 명확하게 작성
얼마나 detail 하게 작성할지에 관한 문제이며, 중요한 점은 실제 데이터를 처리하는 순서를 명확히 하여 작성해야 한다는 점입니다.
3) 모든 프로세스를 빠짐없이 작성 (중요)
가능한 실제코드가 동작하는 프로세스대로 작성해야 합니다. Code Logic에 집중하여 초기값 설정, for문, while문, if문 등의 구조가 의사 코드에 보여야 하고, 가능하다면 구조 상에서 예외 Case를 처리해야 하는 부분을 미리 파악합니다.
중요한 점은, 문제를 동작할 수 있는 코드로 바로 구현하는 것이 아니라, 문제를 읽은 후 Step2에서 전체 코드 구조를 잡고, Step 3에서 그 구조를 보며 예외 Case, 문법 등을 고려하여 동작할 수 있는 코드로 구체화한다는 점입니다.
의사코드를 반드시 써야만 하는 문제 유형 : 구현 문제
모든 문제에 의사 코드를 사용하면 좋지만, 구현 문제는 반드시 의사 코드를 작성해야 문제 풀이가 수월해집니다.
예제로 '2020 카카오 인턴십 코딩 테스트의 수식 최대화' 문제를 풀어보겠습니다.
from itertools import permutations
import copy
def solution(express)
oper=['*', '-', '+']
# express 문자열을 list에 넣는다. 그래야 요소를 하나씩 for문으로 읽어온다.
*, -, + 앞뒤로 띄어쓰기를 넣고, 띄어쓰기를 기준으로 split
result = 0
# 3!에 대해, 연산자 우선순위를 결정
for perm in permutations(oper)
#우선순위 결정된 순서대로 연산
temp =0
express 원복
for p in perm
# 해당 연산자를 리스트에서 찾으면 앞뒤로 연산후 대체
while p in express
p의 인덱스를 찾는다.
인덱스 기준 앞의 숫자, 뒤의 숫자를 p에 대한 연산을 한다. eval
계산 결과를 앞의 숫자위치에 넣는다.
연산자와 뒤의 숫자는 제거
다음 while문 돌기전 express는 앞뒤 숫자 연산한 결과로 대체된 상태
temp = express에 담긴 결과
result = max(result, abs(temp))
return result
작성된 의사 코드를 보면, 다음 두 가지를 명확히 알 수 있습니다.
- 주석과 함께 작성하여서, 어떤 변수에 어떤 데이터가 어떠한 목적으로 담기는지 알 수 있습니다.
- 데이터를 어떤 Logic ( 변수를 초기화하는 위치, for문, while문, if문 )으로 처리하는지 알 수 있습니다.
문제 풀이 결과인 result 변수를 초기화하는 위치는 가장 위쪽이 됩니다. 2중 for문 안에 while문이 있는 형태로 모든 경우의 수를 처리합니다. 이러한 Logic은 문제 정독 후 상황을 구체화하는 Step 1에서 가닥을 잡고, 의사 코드를 작성하며 구체화합니다. 각 경우에서 중간 결과를 저장하는 temp 변수의 초기화 위치는 for문 내, 가장 위쪽이 됩니다.
주석을 통해 for문에서 반복되는 변수들 permutation(oper), perm, express에 어떤 데이터가 담기는지 알 수 있고, 어떻게 데이터가 처리되는지 알 수 있습니다. 각 경우에 대한 결과 temp를 매번 비교해서 가장 큰 값을 result 변수에 저장하고 return 하고 있습니다.