본문 바로가기

Algorithm

(71)
프로그래머스 / 코딩 테스트 / JadenCase 문자열 만들기 문제 설명 문제 해결 공백을 기준으로 문자열을 나누고 문자열만 존재한다면 첫 번째 글자는 대문자로 만들고 두 번째 글자부터 전부 소문자로 만들어주면 된다. def solve(s): res = s.split(" ") for i in range(len(res)): if res[i].isalpha(): res[i] = res[i][0].upper() + res[i][1:].lower() return " ".join(res) def solution(s): answer = solve(s) return answer
프로그래머스 / 코딩 테스트 / 행렬의 곱셈 문제 설명 문제 해결 선형대수를 배울 때 행렬곱에 대해서 배운 적이 있다. [스크랩] 행렬이란 무엇인가?- 선형대수.벡터와의 관계 선형대수란 무엇인가? [행렬.벡터와의 관계] -재능있는 대한민국 고딩들을 위해- 선형대수란 말그대로 선형대수다. 선형은 곧 직선이요 대수는 곧 방정식이다. 곧, 직선방정 blog.daum.net m * n, n * r 크기의 행렬을 곱하면 m * r 크기의 행렬이 나온다. 첫 번째 행렬의 행 벡터들과 두 번째 행렬 열 벡터들을 내적하여 새로운 행렬을 구성한다. 두 번째 행렬의 행과 열을 바꿔준다. [파이썬] 이차원 리스트 행과 열을 쉽게 바꾸기 다음과 같은 이차원 리스트가 있다고 가정하자. mylist = [ [1,2,3], [4,5,6], [7,8,9] ] 이차원 리스트 행..
프로그래머스 / 코딩 테스트 / 올바른 괄호 문제 설명 문제 해결 시도 반복적으로 '()' 문자열만 제거하면 사실상 ')' 혹은 ') ...' 관련 문자열 밖에 안 남을 것이다. find 함수를 이용해 '()' 문자열이 존재하는지 파악하고 replace 함수로 반복적으로 지워주는 코드를 작성했다. 정확성 테스트는 모두 통과했지만 효율성 테스트는 하나도 통과하지 못했다. def solve(s): while s.find('()') != -1: s=s.replace('()',"") return (len(s)
프로그래머스 / 코딩 테스트 / 튜플 문제 설명 문제 해결 일단 입력으로 여러 집합이 담긴 집합을 표현한 문자열을 준다. 즉 해당 문자열들을 파싱해야 한다. 파싱이 완료되면 정렬되지 않은 리스트를 원소의 길이에 따라서 정렬해줘야 한다. 리스트와 리스트 사이의 '-' 연산자는 지원되지 않는다. 리스트를 집합으로 전환하여 차집합을 구하고 다시 리스트로 구하여 해당 숫자에 접근할 수 있도록 인덱싱한다. def solve(s): s = s.split('},') for i in range(len(s)): s[i] = s[i].replace('{','') s[i] = s[i].replace('}','') s[i] = [int(x) for x in s[i].split(',')] s = sorted(s,key=lambda x : len(x)) res = ..
프로그래머스 / 코딩 테스트 / 멀쩡한 사각형 문제 설명 문제 해결 규칙을 알아내야 풀 수 있는 문제이다. 5 * 3 크기의 직사격형이다. 대각선이 1 * 1 크기의 정사각형 7개를 지나간다. 8 * 12 크기의 직사각형이다. 대각선이 1 * 1 크기의 정사각형 16개를 지나간다. 5 * 4 크기의 직사각형이다. 대각선이 1 * 1 크기의 정사각형 8개를 지나간다. 2 * 8 크기의 직사각형이다. 대각선이 1 * 1 크기의 정사각형 8개를 지나간다. 직사각형의 가로의 길이를 W, 세로의 길이가 H로 정의되어 있고 대각선이 지나는 1 * 1 크기의 정사각형의 개수는 W + H한 값과 상당히 근사하게 값이 나오고 있었다. 3시간 정도 직사각형과 대각선을 그리고 패턴을 찾아본 결과 개수가 W + H - gcd(W,H)라는 결론을 얻게 되었다. (선의 두께..
프로그래머스 / 코딩 테스트 / 2016년 문제 설명 문제 해결 네이버 캘린더 앱에 들어가서 2016년 각 월의 일이 얼마나 있는지 파악한다. 날이 얼마나 지났는지 계산을 하여 나머지 연산을 이용해 몇요일이 지났는지 구한다. def solve(a, b): res = ("FRI","SAT","SUN","MON","TUE","WED","THU") day = (31, 29, 31, 30, 31,30, 31, 31, 30, 31, 30, 31) return res[(((sum(day[:a]) - (day[a-1] - b)) % 7) -1)] def solution(a, b): answer = solve(a,b) return answer 물론 억지로 한 줄을 만들 수 있다. def solve(a, b): return ("FRI","SAT","SUN","M..
프로그래머스 / 코딩 테스트 / K번째 수 문제 설명 문제 해결 문제에서 요구하는 데로 commands를 이용해 array를 인덱싱하여 정렬후 원소를 추출하면 된다. comprehension을 이용하면 한 줄로 풀 수 있다. def solve(array, commands): return [sorted(array[command[0]-1:command[1]])[command[2]-1] for command in commands] def solution(array, commands): answer = solve(array, commands) return answer
프로그래머스 / 코딩 테스트 / 완주하지 못한 선수 문제 설명 문제 해결 hash를 사용해본 적이 없어서 다른 해결 방법을 고민해봤다. "한 명의 선수"를 제외하고는 다 완주했다. 동명이인이 있을 수도 있다. 완주자 명단과 참가자 명단의 크기 차이는 1이다. 명단들을 같은 기준으로 정렬하고 각 원소들을 비교한다. 명단이 같은 기준으로 정렬되었기 때문에, 동명이인이나 누락되지 않는 한 각 원소들의 위치는 똑같을 것이다. 맨 마지막에 동명이인이나 누락자가 있을 수도 있으니까 리스트를 다 순회하고도 return문에 접근하지 않으면 참가자의 마지막 원소를 반환한다. def solve(participant, completion): participant = sorted(participant) completion = sorted(completion) for i in ..
프로그래머스 / 코딩 테스트 / 크레인 인형뽑기 게임 문제 설명 문제 해결 사라진 인형의 개수를 반환해야하는 문제이다. 일단 입출력 예부터 살펴보자. move를 이용해서 몇 번째 행의 인형을 크레인으로 뽑을 지 결정해야 한다. i를 이용해서 행을 아래 방향으로 순차적으로 참조해야 한다. (인형이 0이면 아무것도 안하고 넘어가므로) 인형을 뽑아주는 코드는 다음과 같이 작성할 수 있다. def drawToy(board, moves): bucket = [] for move in moves: cond = True for i in range(len(board)): if cond: if board[i][move-1] == 0: pass else: bucket.append(board[i][move-1]) board[i][move-1] = 0 cond = False py..
프로그래머스 / 코딩 테스트 / 소수 찾기 문제 설명 문제 해결 소수를 구하는 방법으로 에라토스테네스의 체를 찾았다. 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2 ko.wikipedia.org 2부터 입력받은 숫자, n까지 숫자들이 소수인지 검증한다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net def solve(n): a = [False,False] + [True]*(n-1) primes=[] for i in range(2,n+1): if a[i]: primes.append(i) for j in range(2*i, n+1,..