1. 아이디어
>> 정렬 후 비교해서
>> 다른 경우가 생기는 경우를 return 한다.
2. 시간복잡도
>>
3. 자료구조
>>
(2) 코드
# 풀이1 : 리스트 정렬
def solution(participant, completion):
p = sorted(participant)
c = sorted(completion)
for i in range(0, len(completion)):
if p[i] != c[i]:
return p[i]
return p[-1]
# 풀이2 : hash 이용
def solution(participant, completion):
hashDict = {}
sumHash = 0
# 1. Hash : Participant의 dictionary 만들기
# 2. Participant의 sum(hash) 구하기
for part in participant:
hashDict[hash(part)] = part
print(hashDict)
sumHash += hash(part)
# 3. completion의 sum(hash) 빼기
for comp in completion:
sumHash -= hash(comp)
# 4. 남은 값이 완주하지 못한 선수의 hash 값이 된다
return hashDict[sumHash]
1. 아이디어
>> 특정 3칸을 차지하면 나머지 칸에서 ㄱ or ㄴ 형태로 3칸을 차지하는 모든 경우를 체크해서
>> 문제에서 요구하는 사항에 맞는 최댓값을 갱신시킨다.
>> 특정 3칸을 이동하고 다시 반복
>> 특정 3칸 ㄱ or ㄴ 형태를 어떻게 입력시킬 것인지?
>> ┌, ┐, └, ┘ 각 4가지 모양을 기준으로 위의 로직을 반복한다.
2. 시간복잡도
>>
3. 자료구조
>>
(2) 예제 입력, 예제 출력
- 예제 입력 1 -
3 3
32 83 75
24 96 56
71 88 12
- 예제 출력 1 -
632
- 예제 입력 2 -
1 1
7
- 예제 출력 2 -
0
(3) 코드
# (0,0)부터 시작
# 시작점을 방문안했으면
# 부메랑 블럭이 범위 안에 있고, 방문안했으면 --> 강도 계산
# 시작점을 방문했으면
# 시작점 = 한칸 옆
def first(y, x):
return woods[y][x-1] + 2*woods[y][x] + woods[y-1][x]
def second(y, x):
return woods[y][x-1] + 2*woods[y][x] + woods[y+1][x]
def third(y, x):
return woods[y+1][x] + 2*woods[y][x] + woods[y][x+1]
def fourth(y, x):
return woods[y-1][x] + 2*woods[y][x] + woods[y][x+1]
def solve(y, x, strength):
global N, M, answer
if x == M:
x = 0
y += 1
if y == N:
answer = max(answer, strength)
return
if not visited[y][x]:
if y - 1 >= 0 and x - 1 >= 0 and not visited[y][x-1] and not visited[y-1][x]:
visited[y][x] = visited[y][x-1] = visited[y-1][x] = True
this_strength = strength + first(y, x)
solve(y, x+1, this_strength)
visited[y][x] = visited[y][x-1] = visited[y-1][x] = False
if y + 1 < N and x - 1 >= 0 and not visited[y+1][x] and not visited[y][x-1]:
visited[y][x] = visited[y][x-1] = visited[y+1][x] = True
this_strength = strength + second(y, x)
solve(y, x+1, this_strength)
visited[y][x] = visited[y][x-1] = visited[y+1][x] = False
if y + 1 < N and x + 1 < M and not visited[y+1][x] and not visited[y][x+1]:
visited[y][x] = visited[y][x+1] = visited[y+1][x] = True
this_strength = strength + third(y, x)
solve(y, x+1, this_strength)
visited[y][x] = visited[y][x+1] = visited[y+1][x] = False
if y - 1 >= 0 and x + 1 < M and not visited[y-1][x] and not visited[y][x+1]:
visited[y][x] = visited[y][x+1] = visited[y-1][x] = True
this_strength = strength + fourth(y, x)
solve(y, x+1, this_strength)
visited[y][x] = visited[y][x+1] = visited[y-1][x] = False
solve(y, x+1, strength)
N, M = map(int, input().split())
woods = [list(map(int, input().split())) for _ in range(N)]
visited = [[False] * M for _ in range(N)]
answer = 0
solve(0, 0, 0)
print(answer)
(4) 정리
아이디어는 맞았으나 구현을 제대로 못해 해답을 찾아본 문제입니다. 구체적으로 visited 등에 ┌, ┐, └, ┘등 각 모양을 체크 후 재귀를 구현하는걸 세세히 코드화시키지 못하였습니다. 구현력 기르는 연습을 계속해야할 듯 합니다.
1. 아이디어
>> 예제 입력과 예제 출력을 보고 뭔말인지 도저히 모르겠음
>> 문제 이해 함
>> 문제 조건에 맞는 1번째로 가장 작은수는 0
>> 2번째로 가장 작은 수는 1
>> 3번째로 가장 작은 수는 2
>> ...
>> 10번째로 가장 작은 수는 9
>> 11번째로 가장 작은 수는 10
>> 12번째로 가장 작은 수는 20
>> 그래서 어떻게 풀건데?
>> 마지막 값 > 현재 값 경우, 재귀 진행하여 감소하는 수를 만들어 준다.
>> 감소하는 수를 정렬한다.
2. 시간복잡도
>>
3. 자료구조
>>
(2) 예제 입력, 예제 출력
- 예제 입력 1 -
sample
- 예제 출력 1 -
sample
(3) 코드
n = input()
arr = list()
result = list()
def dfs():
if len(arr) > 0:
result.append(int("".join(map(str, arr))))
for i in range(0, 10):
if len(arr) == 0 or arr[-1] > i: # 마지막 값이 더 큰 경우
arr.append(i)
print(arr)
dfs()
arr.pop()
try:
dfs()
result.sort()
print(result[n - 1])
except:
print(-1)
문제2의 경우 문제 풀이 해설을 보니깐 문제를 잘못이해했음을 알게되었습니다. 반복되는 패턴이 많은 문자열을 지워야 하는건데 단순히 알파벳 갯수만 세서 많은것만 제외시켜버렸는데 결과적으로 단순히 알파벳 갯수만 세서 많은 것만 제외시켜버리는 방법이 정해임을 알게되었습니다.(의도치 않게 바로 정해로 풀게됨) 문제3의 경우 처음 들어본 유형에 어떻게 풀어야할지 감이 안와 포기했습니다.
5. 소감
코딩 테스트에서 풀어서 제출한 첫 경험이라 2솔했다는 것에 매우 만족합니다.(비록 테스트 케이스 통과지만)
영문 레쥬메를 작성해서 제출해야 됩니다. 따로 양식은 주어지지 않고 예전에 학교에서 영문 이력서 특강을 들어서 받은 양식이 있었는데 그 양식대로 제출했습니다. 작성 내용으로는 학력, 관련활동, 동아리활동, 스킬, 자기소개 등을 작성해서 제출했습니다.
2. 안내 메일
사진처럼 메일이 오고 기재된 날짜 내에 테스트를 치루기만 하면 됩니다. 안내대로 사전등록 과정을 거치고 본테스트에 입장하기 사전 테스트할 수 있는 링크도 있어 이걸로 사전 연습을 해볼 수 있습니다.
3. 테스트 입장 전
챌린지 시작 Google 온라인 챌린지에 오신 것을 환영합니다.
과제 형식: Google의 온라인 챌린지는 사용자의 코딩 능력을 평가하기 위해 설계되었습니다. 두 개의 코딩 질문을 완료하는 데 60분의 시간이 주어집니다. 다음은 과제를 시작하기 전에 주의할 몇 가지 중요한 사항입니다.
I: 성공적으로 로그인하려면 다음 3단계를 주의 깊게 읽어보십시오.
1단계: 전자 메일 주소로 로그인한 경우 플랫폼에서 로그아웃한 후 인식 모드로 로그인하십시오.
2단계: 챌린지 플랫폼에서 Google 온라인 챌린지 ID와 패스키로 로그인하라는 메시지가 표시됩니다.
3단계: Google의 온라인 도전을 위해:
— 사용자 이름 = 고유한 Google 온라인 챌린지 ID(예: 123456789012) (전자 메일 사용 안 함)
— 암호 = 챌린지 암호(예: 123456)
— 새 계정에 가입하거나 기존 로그인을 계속하는 등 다른 로그인 방법을 사용하지 마십시오. 자신에게 할당된 챌린지 ID와 패스 키를 사용하여만 온라인 챌린지에 로그인하고 참여할 수 있습니다.
참고: "당신(abc@xyz.com)은 이 테스트에 초대되지 않았습니다. 테스트 관리자에게 문의하십시오. Google Support googleonlinechallenge-ticket@google.com" - Google Online Challenge ID 또는 암호를 잘못 입력하여 도전에 액세스했음을 의미합니다. 1~3단계를 다시 수행하십시오! II: 도구에 익숙해지는 중
실제 도전을 하기 전에 도전 플랫폼의 연습 링크를 사용하여 코딩 환경에 익숙해지십시오. 연습 챌린지의 문제 수와 연습 챌린지의 기간이 실제 챌린지와 다를 수 있으니 참고하시기 바랍니다. 연습 라운드에서 평가를 받지 않습니다. 챌린지가 라이브로 진행되면 어디에서 챌린지를 찾을 수 있는지 알아보려면 아래 이미지를 참조하십시오.
III: 도전을 위하여
할당된 온라인 챌린지 ID 및 암호를 사용하여 도전을 시도하고 있는지 확인합니다. 챌린지가 시작되면 타이머를 일시 중지할 수 없습니다. 도전은 한 번에 완료해야 합니다. 시스템이 Hacker Earth의 호환성 요구 사항을 충족하는 것이 좋습니다. 안정적인 작동 인터넷(최소 속도 5Mbps)을 사용하는 것이 좋습니다. 모바일 인터넷/핫스팟을 사용하지 마십시오. 설치된 확장이 테스트 환경을 방해하지 않도록 무명 또는 개인 창에서 테스트를 시도하는 것이 좋습니다. 다른 창과 탭을 모두 닫아 방해가 되지 않도록 하는 것이 좋습니다. 가장 편한 코딩 언어를 선택하십시오. 코드 중간에 언어를 변경할 경우 수정해야 할 수 있습니다. 최종 답변을 제출하기 전에 테스트 인터페이스의 브라우저 창이나 탭을 닫지 마십시오. 시스템이 갑자기 종료되거나 시간이 부족해도 당황하지 마십시오. 지금까지의 진행 상황은 자동으로 저장됩니다. 테스트 시간이 만료되기 전에 네트워크 문제가 발생할 경우 브라우저를 새로 고치고 테스트에 다시 연결하십시오. 문제가 있는 경우 Google 온라인 챌린지 팀(googleonlinechallenge-ticket@google.com)으로 연락하십시오.
Google은 지원자들이 온라인 챌린지에 한 번 도전하기를 기대하고 있습니다. 온라인 챌린지에 두 번 이상 응시한 것으로 판명된 응시자는 온라인 챌린지 이용 약관을 위반하므로 온라인 챌린지에서 자동으로 자격을 잃게 됩니다. 도전 결과는 온라인에 게시되지 않음을 알려드립니다. 기타 질문은 FAQ를 참조하십시오. 행운을 빌어요!
4. 본 테스트
본테스트는 2문제로 진행됩니다. 사전 테스트를 해보면 알겠지만 문제가 영어로 주어집니다. 평소 백준이랑 프로그래머스만 이용하다보니 문제 해석이 곧바로 되지않아 시간이 오래걸린 점 다른 IDE를 사용할 수 없고 검색 역시 사용할 수 없습니다.
해당 테스트페이지를 빠져나가는 시도를 할 경우 경고메시지가 표시됩니다. 경고가 누적되면 테스트를 강제종료시킵니다.(사전 테스트에서 검색하면서 풀다가 강제종료당함;.;) hackerearth라는 플랫폼에서 진행되며 사전에 해당 플랫폼에 익숙해지면 좋다고 생각합니다. 답안 틀이 미리 제공되어있고 함수만 작성하면 되는 형태입니다. 입출력 함수를 작성하게끔 되어있어(혹은 작성된 상태로 주어져서)백준이랑 프로그래머스랑 적절히 섞은 느낌이 납니다.
출제된 문제 유형은 정리해서 추후에 올려보도록 하겠습니다. 제 기준에는 어려워서 한 문제도 못풀었습니다 ㅠ.ㅠ