Algorithm

Algorithm

[프로그래머스 - lv1] 나머지 한 점

문제 링크: https://school.programmers.co.kr/learn/courses/18/lessons/1878?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 파이썬 zip() 함수 동일 개수로 이루어진 자료형을 묶어 주는 함수 반환값: 두 개 이상의 리스트의 값의 같은 인덱스 짝별로 묶어 튜플에 담아 반환해준다. 만약 짝이 안맞다면 짝이 맞는 부분만 return 된다. zip(*zip) 하게 되면 zipped 한 요소들을 unzip해준다. 문제풀이 from collections import Counter def..

Algorithm

[프로그래머스 - lv1, 2018 KAKAO BLIND RECRUITMENT] [1차] 다트 게임, 파이썬

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17682 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 맨 처음 풀이했을땐 다트 점수에 10이 포함될 수도 있다는 사실을 잊고 풀어 오답이었다. 그 다음 10에 대한 처리를 해주었더니 6, 7번 테스트 케이스에서 계속 오류가 났었는데 10을 할당한 이후 초기화 시켜주는 것을 깜빡했었다. 총 세번 던지는 것이므로 각 횟수의 점수를 scores = [0, 0, 0] 으로 초기화 한후 update 시켜주는 방식을 이용했다. 싱글, ..

Algorithm

[프로그래머스 - lv1] 최소직사각형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/86491 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 1. 먼저 모든 명함을 가장 긴 변을 가로로 돌려본다. 2. 그 다음 세로에서 가장 긴 변을 찾으면 다 넣을 수 있게 된다. def solution(sizes): w = [] h = [] for i in range(len(sizes)): if sizes[i][0] > sizes[i][1]: w.append(sizes[i][0]) h.append(sizes[i][1]) e..

Algorithm

[프로그래머스 - lv1] 문자열 나누기

문제 풀이) 문제에서 제시하는 풀이과정을 이해하는데 시간이 걸렸던 문제였다. 문자열을 분해하는 단계를 가만히 읽어보면 특정 과정을 반복하고 문자열을 또개 또 같은 과정을 반복하다 조건을 만족하지 못하면 종료하란 상황. 재귀적으로 시도해보겠다고 결정. 문제에서 말하는 과정은 다음과 같다. 첫번째 입출력 예의 경우 문자열을 'banana'다 첫번째로 x는 'b'가 되고 나머지 문자열은 'anana'가 된다. 이때 b의 갯수는 1개 이고 anana를 왼쪽에서 오른쪽으로 읽을때 첫번째로 b가 아닌 a의 갯수가 1개 이므로 ba를 분리하고 나머지 nana를 가지고 위의 과정을 되풀이합니다. 이번엔 n이 시작문자 이므로 n 1개 그 다음 ana를 왼쪽에서 오른쪽으로 읽어나가며 n인 경우와 n이 아닌 경우 각각 co..

Algorithm

[프로그래머스 - lv1, 2023 KAKAO BLIND RECRUITMENT] 개인정보 수집 유효기간 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 이 문제는 특별한 문제 풀이 방법이 있다기보다 반성하자는 의미에서 기록으로 남겨둔다. 문제에서 보면 굵은 글씨로 이렇게 적혀있다. 뭐 물론 굵긴 하지만 문제가 워낙 길어서 필요하다고 생각하는 내용들만 슥슥 보고 넘겼다가 괜히 달수를 더하려고 datetime 라이브러리를 가지고 머리를 싸메고 있었다.😐 전에도 카카오 기출을 풀면서 느낀건데 이런 문제가 종종 출제 되는것 ..

Algorithm

[프로그래머스 - lv1] 기사단원의 무기 파이썬

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 이 문제에서 핵심은 각 기사단원의 약수의 시간복잡도를 어떻게 해결할 것인가였다. 일반적인 약수 구하기 방식을 구현하면 시간복잡도 O(N^2)이 된다. cnt = 0 for i in range(num+1): if num % i == 0: cnt += 1 이런식으로 구현하게 되면 만약 위에서 기사의 수 최대 범위인 100000이 되었을때 100000^2이 되어 제한시간을 초..

Algorithm

[프로그래머스 - lv1, 2018 KAKAO BLIND RECRUITMENT] - [1차] 비밀지도

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 나는 십진법으로 된 숫자를 이진법으로 변환후 하나씩 비교를 하면서 맞으면 # 틀리면 ' '공백을 추가하도록 했지만 다른사람의 풀이를 보니 비트 OR 연산으로 한번에 끝낼수 있는 간단한 문제였다. 다음번엔 비트연산자 써서 풀어보기! def solution(n, arr1, arr2): def decode_query(num): temp = bin(num) binary = tem..

Algorithm

[프로그래머스 - lv1, 2020 카카오 인턴십] 키패드 누르기

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67256 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 시뮬레이션 문제였던것 같다. 초반에 키패드를 저장할 자료구조를 잘 선택했다면 쉽게 해결할 수 있었을 것이나 단순히 left, mid, right 배열의 인덱스 값으로 문제를 처리하려고 해서 코드가 많이 지져분해졋다. def solution(numbers, hand): answer = '' left, right = 3, 3 keypad = {'l': [1, 4, 7], '..

Algorithm

[프로그래머스 - lv3] 부대복귀

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/132266 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) BFS를 이용해 해결할 수 있다. 발상을 뒤집어서 destination을 출발지점으로 선택해 역으로 탐색하면서 부대가 위치하 지점까지 도달할 수 있는지를 탐색하면 된다. 도달할 수 없는 경우도 있으므로 visit list를 -1로 초기화 시킨다. 이후 BFS를 수행하면 된다. from collections import deque def solution(n, roads,..

Algorithm

[프로그래머스-lv2] 우박수열의 정적분

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/134239 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 특정 알고리즘이 필요한 문제는 아니었다. 말이 정적분이지만 사실은 사다리꼴의 넓이를 구하는 공식만 아는 정도면 해결할 수 있었던 문제 사다리꼴의 넓이 = (윗변 + 아랫변) x 높이 / 2 .... 근데 뭐든 국어가 문제인것 같다. 문제에서 말하는 오프셋의 의미를 정확히 파악하면 바로 해결할 수 있는 문제였다. 문제에 써있다. 그래프가 끝나는 점으로부터의 오프셋 즉 우박..

Algorithm

[프로그래머스-lv2]디펜스 게임/파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/142085 문제 풀이) heap을 이용해 풀수 있었다. 문제 풀이 과정은 다음과 같다. enenmy list의 원소들을 순서대로 탐색하며 다음과 같은 절차를 밟는다. 1) n(내가 보유하고 있는 병사수)가 enenmy[i](i번째 스테이지 적의 수) 수보다 많다면 내가 보유하고 있는 병사수에서 빼준다. 이러면 특정 스테이지에서 무조건 막히게 되있는데 이때 최대힙을 이용한다. 최대힙에서 heappop()을 하게 되면 내가 지나온 스테이지중 가장 많은 적의 수가 나오게 되있다. 힙에는 내가 스테이지를 클리어하며 소모된 병사의 수(=enemy수)가 저장되어 있다고 가정한다. 2) 이때 부터 ..

Algorithm

[프로그래머스 - lv2] 숫자 변환하기 / 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 다이나믹프로그래밍의 바텀업 방식을 이용해 풀었다. x, y가 100,0000 범위의 문제라 단순 구현으로 풀었어도 해결했을거라 생각했었지만 자연스럽게 DP로 풀어야 된다는 느낌을 받았다. 맨처음 직관적으로 떠오른 점화식은 다음과 같았다, x를 x를 구하기 위한 최소 연산 횟수라고 가정하면 이전항과 다음항들의 관계는 다음과 같을 것이다, DP[x] = min(DP[x -..

Algorithm

[프로그래머스 - lv2] 뒤에 있는 큰 수 찾기 / 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 스택의 LIFO(Last In First Out) 성질을 이용하여 해결할 수 있는 문제다. 스택에 새로 들어오는 수가 top에 존재하는 수보다 크면 그 수는 뒷큰수가 됩니다. 스택에 저장하는것은 수가 아닌 그 수의 인덱스를 저장한다는게 이 문제풀이의 핵심이었던것 같다. 아래 그림을 보면 문제 푸는 과정을 이해할 수 있다. 문제에서 예시에서 numbers = [2, 3,..

Algorithm

[프로그래머스 - lv2] 무인도 여행 / 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) DFS를 이용해 문제를 풀었다. 해당 map에서 방문하지 않고 갈수있는 섬이면 방문 처리를 한후 스택에 할당 이후 재귀적으로 주변 섬들을 탐색해 만약 연결되어 있다면 식량들을 전부 합해 return해주도록 DFS 함수를 구현했다. def dfs(i, j, visited): if 0

Algorithm

[프로그래머스 - lv2] 호텔 대실 / 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 시간을 분으로 바꿔 생각하는게 핵심인 문제였던 것 같다. [입실 시간, 퇴실 시간] HH:MM 포맷으로 적혀있는 시간을 분으로 환산하면 문제가 생각보다 간단해진다. 시간을 분으로 환산하기 위해 다음과 같은 함수를 구현했다. def convert_minute(start, end): start = int(start[:2]) * 60 + int(start[-2:]) end ..

Algorithm

[프로그래머스- lv2] 미로 탈출/ 파이썬

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/159993 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이) 문제에서 1칸의 크기는 1X1 크기의 정사각형이다. 간선의 비용이 1이므로 BFS를 이용해 풀어봤다. 문제 해결 아이디어는 다음과 같다. 먼저 레버를 열어서 탈출구를 열수 있고 레버를 열기전 출구여도 지나다닐수 있다 했다. 즉 start 노드로부터 end 노드까지 cost를 return 하는 bfs함수를 작성한후 BFS('S', 'L') + BFS('L', 'E')의 ..

Algorithm

[BOJ -1256 사전찾기 / 파이썬]

문제 링크 : https://www.acmicpc.net/problem/1256 1) 문제 해결 a 가 n개 z가 m개 있다면 이 두개를 나열하는 순열의 개수를 생각해보면 이다. 근데 이 식을 다시 한번 생각해보면 M = (N + M) - N, N = (N +M) - M이므로, 실제 위 식은 n+mCn 이나 n+mCm 과 동일하다. 그런데 사전은 a부터 나오므로 a 부터 배치한다고 가정하면 남은 z의 개수를 이용해 점화식을 세우는 편이 더 편하다. 먼저 dp 테이블을 만들어 조합식에 관한 테이블을 미리 생성한다. 조합 테이블을 구하는 점화식은 다음과 같다. 위의 식에서 i, j 를 각각 i개에서 j개를 선택하는 경우의 수라고 생각을 해보자. 만약 데이터가 n개가 있다고 가정했을때 마지막 데이터 전까지 데..

Algorithm

[프로그래머스 - lv1, 2022 KAKAO TECH INTERNSHIP] - 성격 유형 검사하기

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1) 풀이 문제가 너무 길어서 문제 읽는데만 대부분 시간을 소요한 문제였다. 간단한 구현문제. 먼저 내가 푼 방식은 이렇다. 각 성격 유형별 point를 저장하는 dictionary를 선언해준후 survey 결과를 반복문을 통해 차례대로 보면서 만약 choices의 인덱스가 비동의를 넘어가는 순간 반대 성격 타입에 점수를 +해주는 식으로 구현을 했다. def solution(sur..

Algorithm

[프로그래머스 - lv1] 2016년

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12901 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1) 풀이 파이썬의 calander 모듈을 이용하면 편리하게 해결할수 있다. 단, 문제에서는 요일 순서가 일 ~ 토로 되어있는데, 이걸 월~일로만 변경해주면 된다. 파이썬 공식 홈페이지에 calander.weekday() 함수에 대한 설명이 다음과 같이 나와있다. https://docs.python.org/ko/3/library/datetime.html?highlight=weekda..

Algorithm

[프로그래머스 - lv0] 주사위의 개수

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120845 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1) 해결 방법 1. box의 가로, 세로, 높이 각각의 경우에 대하여 주사위의 한 모서리 길이만큼 나눠준다. 생각해보면 이렇다. 일단 주사위를 박스에 채울경우 문제 예시에서 박스의 높이는 6이므로 바닥부터 차곡차곡 쌓는다고 가정하면 총 2층높이로 쌓을수 있다.(box의 높이 6, 주사위 한변의 길이 3) 그러면 2층 높이로 쌓는데 바닥에는 얼마나 들어갈수 있을까? 간단하게 생각해..

Algorithm

[프로그래머스-lv0]문자열 정렬하기(1)

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120850 풀이 방법 파이썬 str Class 에는 isdigit()이란 함수가 존재. 만약 문자열이 모두 숫자로 이루어져 있으면 True를 그렇지 않다면 False를 반환한다. 예시 print('Hello'.isdigit()) print('123'.isdigit()) print('Hello123'.isdigit()) 결과 False True False 위 함수를 이용해 반복문으로 문자열을 돌면서 한글자씩 확인한다.(100글자 밖에 안되기 때문에) 그런다음 만약 isdigit()이 True인 경우, answer 리스트에 int형으로 변환시켜 추가한 후 마지막 sort 시킨후 return..

한상희
'Algorithm' 카테고리의 글 목록