Programmers Random
💻230617~230623 (LV. 2)
1. 숫자의 표현 (Lv. 2) 12924
0부터 n까지 숫자 하나씩 올려서 돌리면서 n이면 answer += 1, n보다 커지면 break
2. 스킬트리 (Lv. 2) 49993
skill이 "CBD"이면 C를 무조건 해야 B를 할 수 있음.
문자열에서 C를 발견하면 i+=1을 하여 문자열 B가 나올 때까지 문자열 돌림
3. 예상 대진표 (Lv. 2) 12985
(4, 7) → ((4+1)//2=2, (7+1)//2=4) → ((2+1)//2=1, (4+1)//2=2) → ((1+1)//2=1, (2+1)//2=1), cnt는 3
4. [1차] 뉴스 클러스터링 (Lv. 2) 17677
1. str.lower()로 모두 소문자로 바꾼 후 비교
2. 교집합은 set1 원소가 set2에 있으면 교집합 배열에 넣은 후 set2에서 해당 원소 삭제
3. 합집합은 {set1 + set2 - 교집합}
5. [1차] 캐시 (Lv. 2) 17680
최근 사용한 것을 제일 처음에 넣어주고
개수가 넘어가면 제일 뒤에 있는 원소 pop하기
💻230916~230922 (LV. 2)
1. 주차 요금 계산 (Lv. 2) 92341
dict1: 입차 딕셔너리
dict2: 시간 계산 결과 딕셔너리
2. k진수에서 소수 개수 구하기 (Lv. 2) 92335
범위를 (2, int(math.sqrt(n))+1) 이렇게 안 해주면 시간초과남
3. 두 큐 합 같게 만들기 (Lv. 2) 118667
9번째 줄 *3인 이유
length가 최대일 때는
1. a에서 b로 다 넘김 -> 길이 n
2. b에 있는 (a+b)를 a로 다 넘김 -> 길이 2n
따라서 최대 길이는 3n임
💻230923~231006 (LV. 2)
1. 튜플 (Lv. 2) 64065
eval: 문자열로 식을 입력하면 해당식을 실행한 결과값을 반환
{} 기호는 인식 못 함(TypeError: unhashable type: 'set')
[]로 replace 해주고 eval 하면 해결
길이 짧은 순으로 정렬
answer에 해당 숫자가 없다면 추가하기
2. [3차] 압축 (Lv. 2) 17684
1. A~Z 까지의 딕셔너리 만들기
2. 현재 입력 W는 이전 반복문의 다음 글자(c)임
3. W('KA')가 dict에 없다면
4. dic['KA'] = 27로 해주고 j의 값 증가시킴
5. c(다음 글자)는 'A', w(현재 입력)는 'K'
6. w의 딕셔너리 값(dic['K']=11)을 answer에 넣음
7. i를 w길이 만큼 증가시켜서 다음 반복문은 'A'부터 시작하게 함
3. [3차] n진수 게임 (Lv. 2) 17687
notation은 진법 바꾸는 함수
answer2는 전체 학생들이 말하는 수
answer는 answer2에서 튜브가 말해야하는 수
4. 오픈채팅방 (Lv. 2) 42888
Enter, Change일 떄 세번째 값이 닉네임이므로 같은 아이디에 닉네임을 갱신해줌(안 바껴도 갱신해줌)
5. [3차] 파일명 정렬 (Lv. 2) 17686
무조건 영문자로 시작하고 숫자가 있으므로
처음부터 돌다가 숫자가 나오면 그 이전 글자까지 소문자로 바꾼 후 배열 두 번째 값에 넣고,
숫자를 돌다가 영문자가 나오거나 파일명이 끝나면 숫자로 바꾼 후 배열 세 번째 값에 넣음
※ 소문자와 숫자로 바뀌기 때문에 원래의 파일명을 알지 못 함 -> 원래 파일명의 인덱스 값을 배열 첫 번째 값에 미리 넣어주기
※ TAIL이 없는 경우도 생각해야함
6. [1차] 프렌즈4블록 (Lv. 2) 17679
1. 세로로 내려오게 하는 건 매우 힘듦 -> 전치 행렬로 바꾸자
2. 2x2를 찾은 후 바로 삭제하면 여러 2×2에 포함되는 부분은 지워지지 않을 수도 있음 -> 지워야하는 부분의 인덱스를 모두 집합에 추가한 후 나중에 지우기
3. 해당 인덱스를 0으로 바꾼 후 0인 부분을 지우고 지워진 개수만큼 배열 앞에 0을 추가 -> 글자를 뒤로 밀어서 떨어지는 것을 구현함
💻231007~231013 (LV. 1)
1. 숫자 문자열과 영단어 (Lv. 1) 81301
문자열의 영어를 숫자로 바꾸면 됨
replace를 연쇄적으로 써도 되지만 for문 쓰면 편함
딕셔너리 for문 문법
for key, value in dict.items():
하면 key, value를 한번에 쓸 수 있음
2. [1차] 비밀지도 (Lv. 1) 17681
notation함수는 모든 진법으로 바꿀 수 있음
2진수, 8진수, 16진수는 내장함수를 쓸 수 있음
[10진수 → n진수]
2진수: bin()
8진수: oct()
16진수: hex()
[n진수 → 10진수]
int('0b111100', 2)
int('0o74', 8)
str(0b111100)
딕셔너리 for문 문법
for key, value in dict.items():
하면 key, value를 한번에 쓸 수 있음
3. 실패율 (Lv. 1) 42889
• 계수 정렬(O(N) 정렬)
조건: 0이상의 정수, 범위가 정해져 있어야함
1. 원래 데이터 [3,4,1,2,4,6,1]
2. 개수 저장하는 데이터 [0, 2, 1, 1, 2, 0, 1] (1이 2개, 2가 1개 있다는 뜻)
3. 정렬된 데이터 [1,1,2,3,4,4,6] (1을 2번, 2를 1번 출력하면 됨)
• 0으로 나눌 수 없으므로 0일때 예외처리 해줘야 함
• sort 내림차순, 오름차순 같이 쓰고 싶으면
(-x[1], x[0]) 이렇게 쓰면 됨
'-'를 붙이면 내림차순으로 됨
4. [1차] 다트 게임 (Lv. 1) 17682
• 0~10이므로 10일 때 예외처리 해줘야 함
• 스타상일 때만 저번 값 포함임(아차상일 땐 x)
5. 로또의 최고 순위와 최저 순위 (Lv. 1) 77484
💻231014~231020 (LV. 1, LV. 3)
1. 크레인 인형뽑기 게임 (Lv. 1) 64061
zip 내장함수
zip은 여러 개의 배열들을 첫 번째 요소끼리, 두 번째 요소끼리 묶어주는 함수
튜플로 묶여지기 때문에 map을 사용해서 list로 바꿔주면 전치행렬로 사용할 수 있음
2. [카카오 인턴] 키패드 누르기 (Lv. 1) 67256
keypad 딕셔너리에 각 숫자의 버튼을 저장하면 바로 거리를 계산 할 수 있음
3. 신규 아이디 추천 (Lv. 1) 72410
4. 불량 사용자 (Lv. 3) 64064
result는 각 banned_id에 해당하는 user_id를 저장한 배열이다
백트래킹에서는 재귀함수를 돌고 나오면 원래 값으로 돌려주어야 함
💻231021~231027 (LV. 1, LV. 3)
1. 메뉴 리뉴얼 (Lv. 1) 72411
course에 있는 숫자로 모든 메뉴의 조합을 만듦
가장 빈도가 많은 것 출력하면 됨
2. [카카오 인턴] 보석 쇼핑 (Lv. 3) 67258
- current는 모든 보석을 다 살 수 있는 조건을 만족하면 계속 갱신됨. (예제 1에서 [B C A] 구간도 위 조건을 만족하므로 current가 1로 갱신됨)
- length의 초깃값은 전체 보석의 개수이고 `현위치-start`가 현재 length보다 작아질 때마다 start는 current로, end는 현위치로 갱신함
3. 성격 유형 검사하기 (Lv. 1) 118666
점수 배열을 새롭게 만들어서 점수를 매기면 쉬움
💻231028~231103 (LV. 2)
https://school.programmers.co.kr/learn/courses/30/lessons/17683
https://school.programmers.co.kr/learn/courses/30/lessons/60058
https://school.programmers.co.kr/learn/courses/30/lessons/67257
댓글남기기