728x90
반응형
SMALL

programmers 38

[Python] 10번 / 공원

✏️ 문제 문제 파악돗자리를 내림차순으로 제공하지 않기 때문에 내림차순을 한 후 풀어야한다! (아니면 틀림)몇중의 for 반복문을 작성해서 풀었다.. 이것밖에 딱히 생각나는 풀 코드가 없었다..  코드def solution(mats, park): mats.sort(reverse=True) h, w = len(park), len(park[0]) for mat_size in mats: for i in range(h - mat_size + 1): for j in range(w - mat_size + 1): can_place = True for k in range(mat_size): ..

[Python] 공원 산책

✏️ 문제 문제 파악원래 좌표 이동과 좀 다르게 아래로 갈수록 +1 되는 형식인데... 이런 형식만 나오면 왜이렇게 헷갈리는 지..  그래서 방향을 처리하는 게 매우매우 중요하다. 그리고 원래 좌표 이동과 별개로 생각하고 계산하는 게 편하다..!중요한 건 routes 중 하나를 처리하는 중에 공원을 벗어나거나 장애물을 만나면 무조건 해당 명령을 받아들이기 전 위치에서 다음 명령을 수행해야한다! 처음에 난 continue를 사용했는데 결과를 보니 예시 3번과 같은 경우 E 2를 처리할 때 장애물을 벗어나므로 E 2라는 명령을 처리하기 전 위치로 가야하는데 E 1까지는 장애물을 벗어나지 않으니까 E 1까지 처리한 후에 다음 명령을 수행해서 계속 틀렸었따 ㅠ  이럴 땐 continue가 아닌 break를 사용..

[Python] 1번 / 붕대 감기

✏️ 문제 문제 파악중요한 건 문제를 잘 읽는 것..! 조건은 다음과 같다.공격을 받으면초당 회복 X연속 성공 = 0현재 체력 -= 피해량공격을 받지 않으면초당 회복 O연속 성공 += 1if 연속 성공 == 시전 시간:현재 체력 += 추가 회복량연속 성공 = 0if 현재 체력 > 최대 체력:현재 체력 = 최대 체력현재 체력 여기서 나의 킥(ㅎㅎ)은 시간이 attack[n][0]의 값과 같은 지 시간이 업데이트될 때마다 attack의 전체를 돌아서 확인하도록 한 것이 아니라 맨 앞인 attack[0][0]만 비교하여 같다고 처리되면 pop()을 통해 맨 앞을 없애 시간복잡도를 줄였다.   코드def solution(bandage, health, attacks): cur_health = health ..

[Python] 햄버거 만들기

✏️ 문제 문제 파악문제를 읽자마자 스택을 사용하는 코드라고 짐작했는데 .... 스택을 여러 개 사용해서 푸는 줄 알고 무슨 조건일 때 스택을 추가하며 .. 이런 고민 때문에 난이도에 비해 시간이 좀 걸렸다.(스택 하나로도 풀 수 있는 문제였음 ..! 🥲)  코드def solution(ingredient): answer = 0 stack = [] for i in ingredient: if i != 1 and len(stack) == 0: continue else: stack.append(i) if stack[-4:] == [1, 2, 3, 1]: answer += 1 ..

[Python] 체육복

✏️ 문제 문제 파악주의할 점은 도난당한 학생과 여벌 체육복을 가져온 학생이 같을 수 있으며 이때 도난당한 학생은 다른 사람한테 빌려주지 않는다는 점이다!set 자료형은 set 끼리 -로 간단하게 차집합을 구할 수 있고 remove를 통해 해당 값을 바로 지울 수 있다.이렇게 편리한 자료형을 사용하면 쉽게 문제를 풀 수 있다. 자료형도 잘 활용하는 것이 문제를 푸는데 중요하다!!  코드def solution(n, lost, reserve): reserve_set = set(reserve) - set(lost) lost_set = set(lost) - set(reserve) for r in reserve_set: if r-1 in lost_set: l..

[Python] 키패드 누르기

✏️ 문제 문제 파악0을 제외한 숫자 키패드를 배열에 넣어서 배열의 인덱스를 활용해서 풀었다.cur 2차원 배열에 인덱스 0에는 왼손의 마지막 위치, 1에는 오른손의 마지막 위치를 넣어 움직였을 시 해당 숫자 키패드 위치를 대입하는 코드로 짰다.   코드처음에 제출한 코드def solution(numbers, hand): answer = '' cur = [[0, 3], [2, 3]] for n in numbers: if n == 1 or n == 4 or n == 7: answer += 'L' cur[0][0] = (n-1) % 3 cur[0][1] = (n-1) // 3 elif n == ..

[Python] 로또의 최고 순위와 최저 순위

✏️ 문제 문제 파악최고 순위는 최저 순위 - 0의 개수인 걸 기준으로 코드를 짰다.최저 순위는 6이고 최고 순위는 1인데 0이 6개일 시 최고 순위가 1이 아닌 0이 되므로 이를 해결하기 위해 6이 아닌 7부터 시작했다.그리고 최저는 7이 아니라 6이므로 7일 경우 6으로 바꿔주었다.  코드def solution(lottos, win_nums): answer = [7, 7] zero = lottos.count(0) for l in lottos: if l in win_nums: answer[0] -= 1 answer[1] -= 1 if answer[1] != 1: answer[0] = ans..

[Python] 문자열 나누기

✏️ 문제 문제 파악문제 내용 그대로 하드코딩.. 으로 풀었는데 마지막에 남은 부분을 더하는데 고민을 좀 했었다..  확실히 다른 코드를 보고 다양한 풀이를 보면 더 나은 풀이 방법을 생각하게 되는 것 같다!내 코드는 아직 너무 부족해 ...ㅠ  코드def solution(s): answer = 0 first = '' x = 0 no_x = 0 for c in s: if first == '': first = c if c == first: x += 1 else: no_x += 1 if x == no_x: ans..

[Python] 둘만의 암호

✏️ 문제 문제 파악처음에 s의 각 문자들을 +1 하면서 skip에 있으면 skip에 없는 문자가 되도록 +1을 계속 더하는 코드를 for 반복문으로 했는데 for 반복문으로 하면 skip에 있으면 +1을 한 번만 더한다는 문제가 있었다.예를 들면 s = "a", skip = "bcd", index = 1 이라고 한다면결과가 a가 bcd를 넘어 e가 되어야 하는데 처음 푼 코드는 c가 출력되었다..  그래서 for 반복문 대신에 while을 써서 문제점을 해결했고 ord(해당 문자) + 1 > 122 이면 해당 문자 - 26을 해서 'a' 부터 시작하려고 했는데 이것도 좀 이상하게 출력되어서 if ord(cur) + 1 > 122: cur = 'a' 위의 코드처럼 그냥 'a'로 대입하는 게 결과가..

728x90
반응형
LIST