개인 공부/TIL
[ TIL - PGS ] 99클럽 코테 스터디 16일차 TIL + 오늘의 학습 가이드
킴도비
2024. 8. 6. 16:38
💡 오늘의 학습 키워드
- 완전탐색
✅ 오늘 공부한 내용
- 오늘은 럭키비키✨ 하게도 전에 페어프로그래밍 하면서 시간 남아서 풀었던 문제다!
- 오늘의 프로그래머스 문제! 모음사전
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👀 오늘의 회고
🤣 오늘의 문제점
- 오늘의 문제는 규칙을 찾는 것이 가장 중요하다.
- 그리고 사전의 구조가 어떻게 이루어져 있는지 아는 것도 중요하다.
- 초반에 모든 걸 다 조립하려다가 그게 더 어려울 것 같아서.. 규칙을 찾다보니 풀게 되었던 것 같다. 근데 아마 다 만들었어도 시간초과 났었지 않을까..생각한다.
🔥 어떤 시도를 했는가?
- 초반엔 어떻게 구조가 이루어져있지? 싶어서 그에 대한 내용을 먼저 찾았다.
더보기
A
AA
AAA
AAAA
AAAAA
AAAAE
AAAAI
AAAAO
AAAAU
AAAE
AAAEA
AAAEE
AAAEI
AAAEO
AAAEU
AAAI
AAAIA
AAAIE
AAAII
AAAIO
AAAIU
AAAO
AAAOA
AAAOE
AAAOI
AAAOO
AAAOU
AAAU
AAAUA
AAAUE
AAAUI
AAAUO
AAAUU
AAE
AAEA
AAEAA
AAEAE
AAEAI
AAEAO
AAEAU
AAEE
AAEEA
AAEEE
AAEEI
AAEEO
AAEEU
AAEI
AAEIA
AAEIE
AAEII
AAEIO
AAEIU
AAEO
.
.
.
UUUIU
UUUO
UUUOA
UUUOE
UUUOI
UUUOO
UUUOU
UUUU
UUUUA
UUUUE
UUUUI
UUUUO
UUUUU
- 아래는 규칙을 찾기 위한 고군분투한...
- 위의 사전의 구조를 알게 되다 보니 규칙을 찾을 수 있었다.
- 첫번째 글자는 781개의 배수를 가지고 있다. 이 말은 아래와 같다.
- A로 시작하는 단어 1 ~ 781
- E로 시작하는 단어 782~1562
- I로 시작하는 단어 1563~2343
- O로 시작하는 단어 2344~3123
- U로 시작하는 단어 3124~3904
- 위 범위들로 첫번째 글자의 번호가 주어지고, 두번째 글자는156개의 배수를 가지고 있다.
- AA = (781 * 0 +1) + (156 * 0 + 1) = 2
- EA = (781 * 1 + 1) + (156 * 0 + 1) = 782 + 1 = 783
- 위와 같이 범위가 주어진다.
- 세번째 글자의 배수는 31개이다.
- AAA = (781 * 0 +1) + (156 * 0 + 1) + (31 * 0 + 1) = 3
- EAI = (781 * 1 + 1) + (156 * 0 + 1) + (31 * 2 + 1) = 782 + 63 = 845
- 네번째 글자의 배수는 6이다.
- AAAA = (781 * 0 +1) + (156 * 0 + 1) + (31 * 0 + 1) + (6 * 0 + 1) = 4
- EAIO = (781 * 1 + 1) + (156 * 0 + 1) + (31 * 2 + 1) + (6 * 3 + 1) = 845 + 19 = 864
- 다섯번째 글자의 배수는 1이다.
- AAAAA = (781 * 0 +1) + (156 * 0 + 1) + (31 * 0 + 1) + (6 * 0 + 1) + (1 * 0 + 1) = 5
- EAIOU = (781 * 1 + 1) + (156 * 0 + 1) + (31 * 2 + 1) + (6 * 3 + 1) + (1 * 4 + 1) = 864 + 5 = 869
- 세번째 글자의 배수는 31개이다.
- 그래서 초반에는 자리수 별로 for문을 썼었는데 생각해보니 굳이 그러지 않아도 되었던 문제였다!
- 그리고 페어분께서는 5의 몇승? 으로 계산하셨는데 그 방법도 보니 재밌었다. 잘 기억이 안나 gpt한테 물어봤더니 아래와 같은 방법으로 푸셨다는게 기억이 났다..!
- 첫번째 글자는 781개의 배수를 가지고 있다. 이 말은 아래와 같다.
- 내가한 방법이 맞는지 참고했던 질문하기도 큰 도움이 되었던 것 같다.
class Solution {
public int solution(String word) {
String[] alpha = {"A", "E", "I", "O", "U"};
int[] base = {781, 156, 31, 6, 1};
int cnt = word.length();
for (int i = 0; i < word.length(); i++) {
for (int j = 0; j < 5; j++) {
if (word.charAt(i) == alpha[j].charAt(0)) {
cnt += base[i] * j;
break;
}
}
}
return cnt;
}
}
👏 무엇을 새로 알았는가?
- 오늘은 for문 여러개 안쓰고 효율적이고 깔끔하게 코드 쓰는 방법을 다시 새로 알았다!
👩💻 내일은 무엇을 학습할 것인가?
- 항해 99 문제 풀기~!
- 어려웠던 문제 다시 보기
- 역검 하기
- 코테 공부 하기
- 책읽기
- 이력서 제출하기