4 분 소요

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

rank 배열 만들어서 풀면 편함

💻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

댓글남기기