- 16236 (아기 상어)
- 최소거리에 있는 물고기를 찾기 위해 정렬
- 우선순위 큐를 활용할 수도 있음 (정렬할 필요x)
- 먹을 수 있는 물고기를 모두 찾으면서, 문제 조건에 맞는 물고기를 마지막에 찾아야 함
- 2615 (오목)
- (C++)인덴테이션 관리 주의
- break문을 사용할 때는 else문 대신 if문에서 사용하시도록 유도
- 방향정보 dr, dc처럼 저장해서 중복 줄이도록
- 14500 (테트로미노)
- '한 블럭'으로부터 블럭을 붙여나가면서 최댓값을 갱신하는 백트래킹으로 풀이
- 한붓 그리기가 안 되는 모양 (ㅗㅓㅏㅜ) 처리 → 2칸까지 탐색하고 3번째 칸을 칠하고 다시 현재 위치에서 탐색 진행하면 만들 수 있음
- 만들 수 있는 모양을 미리 정해 놓고(일자, 정사각형, 나머지 모양) 네모 윈도우를 덮어 씌워서 빼는 방법은 각 모양마다 로직 작성을 해야 하고, 중복 가능성이 높음 → 따라서 백트래킹 활용하자!
- 14503 (로봇 청소기)
- 16235 (나무 재테크)
- 각 계절마다 연산을 새로하지 않고, 봄에 죽은 나무와 번식할 나무를 모두 구할 수 있음
- 추가되는 나무는 항상 어린 나무이므로 덱을 사용하면 맨 처음을 제외하곤 정렬할 필요 없음
- (Python3) Pypy3로 통과한 경우 → 이 문제는 python3로 추가시간 없이 통과할 수 있는 문제이므로, 시간복잡도를 줄인 풀이에 대해 고민해볼 필요가 있음
- n은 최대 10이지만, 나무는 몇 그루가 될 지 알 수 없으므로, 나무에 대해 반복문을 돌리는 것보다 영역에 대해 이중 반복문을 돌리는 것이 유리할 수 있음 → 계절 별 연산을 묶어서 처리 가능하므로
- 이때 각 나무를 하나씩 저장하면 시간 상 이득을 볼 수 없지만, 같은 나이의 나무들을 묶어서 개수로 저장한다면 시간복잡도를 크게 개선할 수 있음 → 샘플코드 참고
- 3613 (Java vs C++)
- 대문자 혹은 소문자인지 확인하는
isupper, islower
함수
- 대문자 혹은 소문자로 변환하는
toupper, tolower
함수
- java 형식인지 검사하는 함수, cpp 형식인지 검사하는 함수, java 형식으로 변환하는 함수, cpp 형식으로 변환하는 함수로 모듈화하여 적절하게 사용
- 조건문 너무 복잡하게 들어가지 않았는지 확인
- 2607 (비슷한 단어)
- (C++) 알파벳은 26개로 개수가 적기 때문에, 탐색하는 데 O(log(N)) 시간복잡도를 갖는 map으로 알파벳 등장 횟수를 저장하기 보다 O(1) 시간복잡도를 갖는 vector로 저장
- 두 단어의 구성 차이의 수를 diff라고 할 때,
- 삽입 & 삭제라면 diff = 1
- 수정이라면 diff = 2, 두 단어의 길이는 같음
- (Python3) Counter를 사용하여 단어에 포함된 알파벳의 개수를 셀 수 있음