[TIL: 0203] 알고리즘 문제풀이

ryun·2023년 2월 3일
0

TIL

목록 보기
14/34

문제풀이 과정의 목표

  • 입력 TC를 처리하여 정확한 출력을 내보내는 것

우리는 어떻게 구현할지 반복문과 조건문을 활용하면서 루프를 돌리며 순회처리를 기준으로 구상한다

알고리즘 커리큘럼

반복 / 탐색 / 순회 / 조건 (1, 2차원) -> 자료구조 활용 -> 재귀 / 그래프 / 그리디

기존 기출 푸는 것도 중요하고 전체적으로 접근방식을 공부하는 것도 중요

코테에 나오는 문제는...?

직접 구현해야 하는 문제는 문제를 풀면서 직접 아이디어를 내는 것

  • 문제의 규칙성을 발견하는 것
  • 규칙은 수식이 될 수도 있고 조건이 될 수도
    이를 더 체계화 시켜서 알고리즘 활용 (dfs, bfs)

문제풀이 단계

문제 읽기

	속독
    - 스토리 빼고 전체적인 문제를 파악
    - 조건 / 제약 체크
    
	TC 손풀기
	- 입력에 대한 출력이 나와야 한다
    - CPU 처럼
    
    정독
    - 시험시간 50% 가 지났으면 문제 다시 읽어라
    - 모든걸 지우고 초기 템플릿 상태에서 재시작 해라

접근방법 구상

유형을 판단하기는 힘들지만 난이도는 정해져있다. A 형인데 이정도 난이도일것이다 라고 생각해볼 수 있다
하나만 생각하고 바로 진행하기보다는 여러 가지 접근방법을 생각해보자

  • 완전히 새로운 문제는 없다
    이전에 풀었던 문제와 유사한지, 특정 자료구조 적용, 전형적인 알고리즘 적용 가능한지 체크

  • 문제가 시키는대로 시도
    문제 설명대로 예시를 처리하는 것이 접근 가능한지 체크 (제한 조건 내)
    여러 입력에 대한 출력을 계산하면서 규칙성/조건/수식 적용 가능한지 체크

  • 유형/규칙성을 발견하기 힘들다면
    가능한 모든 경우를 처리하면서 풀이가능한지 체크
    전체문제가 아닌 일부분으로 나누거나, 단계를 나누어 접근
    반대로 접근하는 경우를 체크 (문제설명, 조건, array 순회 등)

  • 모든 접근은 시각적으로 (손으로 그리면서)

핵심코드 손코딩

실명을 적어야 한다 (변수이름, 범위 등)
익숙한 이름이나 구조를 써야 한다

코드구현

오타없이 한 동작이 한 눈에 보이도록 한다

디버깅 및 개선


기본기는 철저히 연습

기본기가 탄탄해야 실수없이 구현 가능
입출력, 2차원 array 사용, 다중 루프제어
가장 효율적인/짧은/멋있는 코드보다 기본적인 [반복/조건]을 빈틈없이 구현
손코딩: 사용하는 중요 array, 범위, 핵심코드를 실명/시각적으로 설계하고 접근
필요한 위치에서 필요한 디버깅 가능하도록 디버거 사용법 익히기
문제읽기 > 접근방법 구상 > 핵심코드 손코딩(키보드 멀리)

0개의 댓글