전체 글

우당탕탕 내가 해보고 싶은거 다 해보고 기록 적어두는 곳.
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 시켜주는 방식을 이용했다. 싱글, ..

프로그래머스 AI 데브코스 5기/CS

이진 탐색 트리(Binary Search Trees)

정의 모든 노드에 대해서, 왼쪽 서브트리에 있는 데이터는 모두 현재 노드의 값보다 작고 오른쪽 서브트리에 있는 데이터는 모두 현재 노드의 값보다 큰 성질을 만족하는 이진 트리를 말한다. 이진 탐색과 매우 연관이 깊은 자료구조 -> 탐색에 특화된 자료구조 (장점) 데이터의 원소의 추가, 삭제가 용이하다. (단점) 공간 소요가 큼 이진 탐색 트리의 추상적 자료구조 데이터 표현 - 각 노드는(key, value) 의 쌍으로 관리. 키를 노드의 번호로 하고 value에 내가 원하는 값을 넣어 활용할 수 있다. 키를 이용해서 검색이 가능하고 보다 복잡한 데이터 레코드로 확장이 가능해진다. 연산의 정의 insert(key, data) - 트리에 주어진 데이터 원소를 추가 remove(key) - 특정 원소를 트리로..

프로그래머스 AI 데브코스 5기/CS

이진 트리(Binary Trees)

이진 트리의 추상적 자료구조 연산의 정의 size() - 현재 트리에 포함되어 있는 노드의 수를 구함 depth() - 현재 트리의 깊이(또는 높이: height)를 구함 순회(traversal) 이진 트리의 구현 - 노드(Node) class Node: def __init__(self, item): self.data = item self.left = None self.right = None class Node: def __init__(self, item): self.data = item self.left = None self.right = None def size(self): l = self.left.size() if self.left else 0 r = self.right.size() if self...

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..

Programming/Python

[파이썬] 리스트 내용 문자열로 합치기 - join

"구분자".join(list) 위와 같은 파이썬 join 함수를 이용하면 리스트의 내용을 문자열로 합칠수 있다. 이때 리스트 안의 원소들은 str type 이어야 한다. 코딩테스트나 특정 상황에서 유용하게 이용할 수 있는 함수니 꼭 기억해두도록 하자.

Programming/Python

[파이썬] 진법 변환하기

1. n 진법 -> 10진법 파이썬에서 int(string, base) 를 이용하면 n진법 수를 10진법으로 변환할 수 있다. 주의할점은 string 타입으로 수를 넘겨줘야 한다는점 예를 들어서 print(int('21' , 3)) # 3진법 수 21을 십진법수로 변환한 결과를 출력 print(int('123', 4)) # 4진법 수 123을 십진법수로 변환한 결과를 출력 7 27

Programming/Python

[파이썬] 몫, 나머지 연산자 - divmod

파이썬에서 몫, 나머지를 한번에 구하고 싶을때 다음 내장함수를 이용할 수 있다. quotient, remainder = divmod(나누고자 하는 수, 나눌 수) 그러면 몫 나머지가 반환 된다. return 값은 튜플 형태로 나온다. a = divmod(100, 3) print(a) (33, 1)

프로그래머스 AI 데브코스 5기/CS

[git] 터미널 명령어로 깃 레포지터리 클론하기

나중에 서버상에 배포하게 되면 git을 cli 모드로 다룰수 있어야 한다. 1) 먼저 내가 클론할 디렉터리로 이동한뒤 다음 명령어를 실행하면 된다. git clone '레포지터리 https 주소'

프로그래머스 AI 데브코스 5기/회고록

[프로그래머스 인공지능 데브코스 5기] 합격 및 계획

프로그래머스에서 국비지원 과정으로 운영하는 AI 과정에 합격하게 됬다. 기존 제로베이스 네카라쿠배 데이터 사이언스 과정을 수료하였는데, 기초적으로 부족한게 많고 현업에서 실무를 보기엔 많이 부족하다 판단되어 개인적으로 공부를 하다 좋은 기회라 판단되어 지원하게 됬다. 평소 관심있던 추천 시스템쪽을 공부하며 ML/DL에 관한 기본기를 더 탄탄하게 다질수 있도록 노력해봐야겠다. * 코딩테스트 대비는 꾸준히 해야할 것 같다. 문제를 보고 어떻게 풀어야겠다 감은 잡혀도 특정 테스트 케이스를 통과하지 못해 애를 먹었었다. 기존처럼 꾸준히 하루에 한두문제씩 풀어나가면서 실전 상황이라 가정하고 풀이하는 훈련도 별도로 진행해야겠다. * 수업 내용 블로그에 꾸준히 정리하며 회고록 남기기. 복습겸 블로그에 글을 작성하며 ..

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..

한상희
상희's 실험실