1. 코딩테스트 연습 - 완주하지 못한 선수 | 프로그래머스 스쿨 (programmers.co.kr)
해시 문제
코드
.
모범 답안
def solution(participant, completion):
result=''
participant.sort()
completion.sort()
for i in range(len(completion)):
if(participant[i]!=completion[i]):
return participant[i]
return participant[len(participant)-1]
■ Hash()
def solution(participant, completion):
answer = ''
hash_dict={} # hash dictionary
sumHash=0
for i in participant:
hash_dict[hash(i)]=i # participant hash인덱스 넣기
sumHash+=hash(i) # hash 총합
for j in completion:
sumHash-=hash(j) # completion의 hash값들 빼기
return hash_dict[sumHash] # 남은 hash값에 해당하는 선수가 완주 못한 선수
1) HashMap 만들기
- HashMap이란 Key-Value의 Pair를 관리하는 클래스이다.
- 이 문제에서 Key는 hash한 값이 되겠고, Value는 각 선수의 이름으로 해둔다.
2) HashMap에 Participant 추가하기
- 'Hashing을 한다'라고도 표현하는데, HashMap에 Participant를 전부 추가해보자.
- 위 코드의 동작 방식은 다음 예시로 설명하는 것이 가장 쉽게 이해가 가능할 것이다.
- Index 0
- Index 1
- Index 2
- Hash Map을 보고 나면 별게 아니다. 이 문제에서는 각 이름의 Hash 값을 구하고, 이 값들의 합을 구한다.
- sumHash는 35가 된다
3) sumHash에서 완주한 선수의 Hash값 빼기
- sumHah에서 완주자들을 제외시키면, 한 명만 남게 될 것이고 그 사람이 우리가 찾는 정답일 것이다.
- 위와 동일하게 예제를 통해서 보자.
- Index 0 : sumHash = 35 - 17 --> 18
- Index 1 : sumHash = 18 - 13 --> 5
4) Value가 0이 아닌 참가자 찾기
- 이쯤 되면 문제가 다 해결됐다고 볼 수 있다.
- 남아있는 1명이 완주하지 못한 사람이니, sumHash == 5인 Key를 갖고 있는 사람을 찾으면, 완주하지 못한 선수가 나온다.
- 그래서 hashDict[sumHash] 라는 코드가 나오게 된다.
출처: https://coding-grandpa.tistory.com/85 [개발자로 취직하기:티스토리]
[프로그래머스] 완주하지 못한 선수 문제 풀이(해시 Lv. 1) - 파이썬 Python
0. 동일 유형 문제 [프로그래머스] 완주하지 못한 선수 (해시 Lv. 1) [프로그래머스] 전화번호 목록 (해시 Lv. 2) [프로그래머스] 위장 (해시 Lv. 2) [프로그래머스] 베스트 앨범 (해시 Lv. 3) Youtube 영상으
coding-grandpa.tistory.com
2. 코딩테스트 연습 - 둘만의 암호 | 프로그래머스 스쿨 (programmers.co.kr)
코드
.
모범 답안
def solution(s, skip, index):
answer = ''
alp = 'abcdefghijklmnopqrstuvwxyz'
for sk in skip:
alp = alp.replace(sk, '')
for a in s:
idx = (alp.index(a) + index ) % len(alp)
answer += alp[idx]
return answer
1) 알파벳 a-z 문자열 만들어서 skip에 있는 문자를 공백으로 대
2) index 만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아오게 하는 부분 숙지 !!
3. 코딩테스트 연습 - [PCCE 기출문제] 9번 / 이웃한 칸 | 프로그래머스 스쿨 (programmers.co.kr)
코드
.
모범 답안 ★ 접근 방법 ★
def solution(board, h, w):
n=len(board)
count=0
dh=[0, 1, -1, 0]
dw=[1, 0, 0, -1]
for i in range(0, 4):
h_check = h + dh[i]
w_check = w + dw[i]
if 0<=h_check<n and 0<=w_check<n:
if board[h][w] == board[h_check][w_check]:
count+=1
return count
'코딩테스트 > programmers (python)' 카테고리의 다른 글
20240125/ programmers/ 1단계/ python (0) | 2024.01.24 |
---|---|
20240124/ programmers/ 1단계/ python (0) | 2024.01.24 |
20240122/ programmers/ 1단계/ python (1) | 2024.01.22 |
20240119/ programmers/ 1단계/ python (0) | 2024.01.19 |
20240118/ programmers/ 1단계/ python (0) | 2024.01.19 |