본문 바로가기

프로그래머스66

프로그래머스 Lv2 예상 대진표 (python) 예상 대진표 풀이 처음에는 a와 b의 거리 차이로 풀려고 생각을 했어서 아래처럼 풀었다. def solution(n,a,b): answer = 0 value1, value2 = (a-1)//2, (b-1)//2 quotient = 1 for i in range(1, 21): if 2**i == n: quotient = i break if abs(value1-value2) + 1 > quotient: return quotient else: return abs(value1-value2) + 1 하지만 이러니 추가 테스트케이스로 8, 4, 5, 1의 경우에 틀리게 되어서 이 방법은 폐기하였다. 그래서 다른 방법을 시도하였다. 경기를 몇 번 뛰었는지를 확인하면 되는 것이기에 처음에 대진자와의 짝을 맞춰주기 위해.. 2024. 1. 30.
프로그래머스 Lv2 JadenCase 문자열 만들기 (python) JadenCase 문자열 만들기 풀이 처음에는 간단하게 title()을 쓸까 했지만 문제에서 숫자 다음은 그냥 소문자로 이어지도록하라 했기에 쓸 수 없었다. 그리고 다른 방법으로 capitalize()를 아래처럼 사용해봤다. def solution(s): s_list = list(map(str, s.split())) for i in range(len(s_list)): s_list[i] = s_list[i].capitalize() return ' '.join(s_list) 하지만 위의 방법도 결국 제한 조건에서 '공백문자가 연속해서 나올 수 있습니다.'라는 조건으로 인해 예시로 "for the last week"의 경우에는 해결할 수 없었다. 결국 조금 코드가 길어지긴 하지만 아래의 방법을 사용했다. 문자.. 2024. 1. 30.
프로그래머스 Lv2 올바른 괄호 (python) 올바른 괄호 풀이 문제 유형도 스택/큐 로 되어있었고, 문제를 푸는 방법도 스택이 편하기에 스택을 이용한 방법으로 풀었다. 1. stack을 만들어둠 2. 열린괄호 '('면 stack에 넣고, 닫힌 괄호 ')'면 stack에서 열린괄호'('를 빼는데, 이때 stack이 비어있으면 False 반환 3. 문자열을 끝까지 확인후 stack에 값이 남아있으면, 짝이 맞지 않는 경우이니, False를 반환 4. 이외의 상황은 True 반환 # ( 가 하나 있으면 )도 하나 있어야함. # 하지만 )( 는 안되고 () 순이어야함. # 스택을 이용해보자 # 스택에는 ( 만을 넣고 반복문을 돌리면서 )게 나온다면, 에서 확인하기 def solution(s): stack = [] for i in range(len(s)):.. 2024. 1. 29.
프로그래머스 Lv1 소수찾기(python) 소수찾기 알고리즘 문제풀이를 안 했더니 감을 잃어서 다시 풀면서 실력을 쌓고 있다. 소수와 관련한 문제가 자주 나와서 좀 더 빠르게 소수여부를 확인할 수 없을까 하다가 에라토스테네스의 체를 알게 되었고, 잘 이용하고 있다. 우선 0과 1은 소수가 아니므로 제외하고 2 ~ n이라는 숫자가 있을 때, n까지의 숫자 중 소수가 무엇인지 확인할 때 사용하면 된다. 알다시피 소수는 1과 자기 자신으로만 나눴을 때 나머지가 0인 수를 말한다. 보통이라면 2~n까지의 숫자 i를 모두 돌면서 확인할 텐데 i를 2~(i-1)까지 또는 2~(((i-1)//2)) 까지 돌리면서 i % 해당값 == 0 이면 소수 아님의 방식으로 할 수 있다. 그러나 이 경우 모든 수를 다 확인하게 되므로 시간적으로 비효율적이다. 따라서 처음.. 2024. 1. 29.
프로그래머스 Lv1 K번째수(python) K번째수 정렬할 줄 아냐는 문제다. 문제만 잘 읽으면 python을 쓸 줄 아는 사람이라면 바로 풀이 가능하다. 여기서 i와 j, k는 컴퓨터에서 계산하는 0부터 시작이 아닌 1부터 시작이니 그 부분만 주의하면 된다. 풀이 def solution(array, commands): answer = [] for a in range(len(commands)): i = commands[a][0] j = commands[a][1] k = commands[a][2] answer.append(sorted(array[i-1:j])[k-1]) return answer 다른 사람은 아래처럼 풀었다. def solution(array, commands): return list(map(lambda x:sorted(array[x.. 2024. 1. 29.
프로그래머스 Lv1 신고 결과 받기(python) 신고 결과 받기 풀이 2022 KAKAO BLIND RECRUITMENT 문제로 일반적인 lv1 문제보단 복잡하긴 하다. 내가 풀이를 하면서 중점으로 본 것은 문제를 해결하면서 변수가 꼬이지 않게 하는 것이었다. id_number 대신 index를 사용해서 확인해도 되었으나, 개인적으로 이게 덜 헷갈릴 거라 생각했기에 이렇게 작성을 하고 이용했다. 순서대로 1. 한 유저가 다른 한 유저를 여러 번 신고해도 1번의 신고로 인정되기에 중복 제거 2. 유저별 id번호 기입 3. 각 유저의 신고받은 횟수 기입 4. 신고받은 횟수가 K번 이상일 경우, 그 유저를 신고한 유저에게 메일 보내기 5. 총 메일 받은 횟수를 answer에 기입 위의 5가지 과정으로 위 문제를 풀었고, 아래처럼 풀이했다. # 신고 k번 이.. 2024. 1. 29.