Algorithm/프로그래머스 39

[세무민의 코딩일기] 프로그래머스 오픈채팅방 문제 풀기

오늘 포스팅 할 내용은 2019 KAKAO BLIND RECRUITMENT에서 나온 문제인 오픈채팅방 문제를 풀어봤습니다. 1. 문제 설명 2. 제한 사항 및 입출력 예시 3. 문제 풀이 이번 문제는 생각보다 당황스러웠던 문제 중 하나였습니다. 제가 푼 방법은 딕셔너리를 이용해서 key와 value를 사용한 방식입니다. 이번 문제는 말 그대로 "Enter Uid1234 Muzi"일 경우 "check usrId name"으로 구분하여 check 값이 요청할 때 해당 usrId에 대한 name값을 반환해주면 되는 문제 입니다. 처음 풀었을 때는 런타임 에러가 발생했었는데 두번째 푼 코드는 런타임 에러가 나지 않고 성공했습니다. 우선 코드를 보면서 하나씩 설명하겠습니다. # 틀렸던 코드 def solution..

[세무민의 코딩일기] 프로그래머스 부족한 금액 계산하기 문제 풀이

오늘 포스팅은 프로그래머스에서 위클리 챌린지 1주차 문제인 "부족한 금액 계산하기"입니다. 퇴근 한 후에 머리 식힐 겸 풀어봤는데 생각보다 쉽게 풀어서 포스팅을 하게 되었네요..ㅎㅎ(이 문제가 쉬워요..) 1. 문제 설명 2. 입출력 예시 3. 문제 풀이 이 문제는 문제 설명보다 입출력 예시를 보면 바로 풀 수 있다. 말 그대로 놀이기구의 price와 count의 곱이 money보다 큰지 아니면 같거나 작은지를 구분해주면 됩니다. # 가장 표본인 답변 def solution(price, money, count): answer = -1 resultCheck = 0 for i in range(1, count + 1): resultCheck += price * i if(resultCheck = 0): answ..

[세무민의 코딩일기] 프로그래머스 짝지어 제거하기 문제 풀이

이번 포스팅에서 다룰 문제는 2017년도 팁스타운에서 제공 된 짝지어 제거하기 문제입니다. 이 문제를 풀면서 시간복잡도와 deque의 사용의 장점을 알 수 있었습니다. 1. 문제설명 2. 입출력 예 설명 3. 문제 풀이 이번 문제는 처음에 구상했던 방법은 같은 값이 나오는 i, i+1값을 제거해주면 됩니다. 이 때 방법의 차이로 시간복잡도 문제에 봉착할 수 있습니다. 제가 처음 생각했던 것은 s = s[:count]+s[count+2:]와 같이 같은 문자가 연속으로 존재한다면 해당 값을 제거하고 다시 새로운 문자열로 만들어줬습니다. 이 방법을 이용했더니 시간복잡도에 초과가 되었고 곰곰히 생각한 끝에 deque를 생각했습니다. 말 그대로 deque과 반복문을 이용해서 연속으로 들어있는 값이 있다면 dequ..

[세무민의 코딩일기] 숫자 문자열과 영단어 문제 풀이

오늘 포스팅은 프로그래머스에 있는 "숫자 문자열과 영단어" 문제를 풀어보겠습니다. 해당 문제는 2021년도 카카오 채용연계형 인턴십에서 진행된 문제입니다. 1. 문제 설명 2. 제한사항 및 입출력 예제 3. 문제 풀이 이 문제를 보자마자 생각난건 "replace" 딱 하나였습니다. 말 그대로 숫자가 아닌경우 치환해주면 되는데 파이썬에서 문자열 치환을 해줄 수 있는건 replace입니다. 사실 2차원 배열과 반복문을 통해서 해당 숫자가 아니고 영단어 키워드가 존재한다면 체크해주는 등 이런 방법으로도 가능할 수 있지만 그냥 생각난 replace로 풀었습니다. 생각보다 엄청 쉽게 풀었는데 이게 되서 깜짝놀랬네요..ㄷㄷ def solution(s): s = s.replace('zero','0').replace(..

[세무민의 코딩일기] 보호소에서 중성화한 동물 문제 풀이

오랜만에 알고리즘 문제 풀이 포스팅으로 돌아왔습니다. 최근들어서 어떤 포스팅을 해야할지 고민도 많아졌고 재택에서 출퇴근으로 변경되서 시간이 조금 없다보니 틈틈히 포스팅 할 내용들을 찾다가 이번에 쿼리관련 코테 문제로 찾아오게 되었습니다. 1. 문제 설명 2. 예시 3. 문제 풀이 및 코드 테이블을 TB로 지칭하여서 풀이를 진행해보겠습니다. ANIMAL_INS|TB와 ANIMAL_OUT|TB에서 현재 찾아야 하는 값은 중성화가 되어서 나간 친구들을 찾는것이 중요합니다. 그렇다면 내가 해야할 방법은 SEX_UPON_INTAKE가 ANIMAL_INS|TB에서 중성화가 되지 않은 친구이면서 ANIMAL_OUTS|TB에서는 중성화가 된 친구들을 찾으면 되겠죠? 그렇다면 LEFT JOIN을 이용해서 해당 테이블을 ..

세무민의 알고가자 : 프로그래머스 나머지 한 점 문제 풀이

이번에 풀 문제는 나머지 한 점! 대표적으로 코딩테스트를 보기 전 모의 테스트 시험 문제로 자주 출제된다. 문제 설명 및 입출력! 문제 풀이 이번 문제를 푼 방법은 결국에 사각형의 길이가 일치하지 않는 값만 찾으면 된다는 점에서 생각했다. 즉 2차원 배열에서 첫번째를 Frist, 두번째를 Last라고 가정할 때 Frist와 Last가 동일한 값이 존재하지 않는다면 그 값이 결국 나머지 한점이 된다. 결론적으로 문제를 푸는 방법은! 1. V를 Frist, Last로 분할하고 2. 반복문을 돌려서 중복되는 값이 없다면 그 값을 출력한다. 코드 def solution(v): frist, last = list(), list() for i in range(len(v)): frist.append(v[i][0]) l..

세무민의 알고가자 : 프로그래머스의 소수 만들기 문제 풀이

이번에 풀어 볼 문제는 소수 만들기! 이번 문제는 Summer/Winter Coding 2018년도 문제 중 1개라고 합니다. 무튼 풀어보죠 문제 설명 및 입출력 예시 풀이 이번 문제는 사실 itertools를 사용한다면 10분정도에 풀 수 있었던 문제라고 생각됩니다. 처음에는 당황했던 부분은 3개를 조합한 뒤 그 값이 소수인지 판별하는 것! 그렇지만 itertools에 있는 combinations을 이용한다면 쉽게 풀 수 있었습니다. combinations? 우선 combinations를 설명하면 조합이라고 생각하면 됩니다. 즉 배열에 존재하는 값을 선택하여 조합해주는 것을 말하죠 즉 arr[1,2,3] -> list(combinations(arr, 2))라고 가정하면 result = [1,2], [1..

세무민의 알고가자 : 프로그래머스 제일 작은 수 제거하기 문제 풀이

오늘 풀어 본 문제는 제일 작은 수 제거하기! 문제 설명 및 입출력 풀이 및 코드 이번 문제는 sort를 사용해도 무관한 문제이다. 사실 가장 좋은 방법은 정렬한 뒤 가장 작은 값을 제거해주면 끝! 결론적으로 문제에서 확인할 부분은! 1. 배열의 길이가 1이라면 -1을 리턴 2. 가장 작은 값을 제거해주면 끝! def solution(arr): result = 0 tempArr = [] for i in arr: tempArr.append(i) tempArr.sort() checkNumber = tempArr[0] if len(tempArr) == 1: return [-1] else: arr.remove(checkNumber) return arr 위에 코드처럼 구성했는데 새로운 배열에 기존 arr를 복사해..

세무민의 알고가자 : 프로그래머스 문자열 다루기 기본 문제 풀기

주말 약속을 나가기 전 잠깐 알고리즘 문제를 하나 풀었다. 오늘 풀어 본 문제는 문자열 다루기 기본! 말 그대로 기본 문제! 문제 설명 및 입출력 예시 풀이 나는 이 문제를 보자마자 바로 생각난 건 아스키코드! 이거 하나면 10분도 안되서 문제를 풀 수 있다. 숫자의 아스키코드는 0~9까지 즉 48~57! 요약하면 1. S의 길이가 4 또는 6이 만족하는 지 Check 2. 문자열에 내용이 ord(0) ~ ord(9)까지 속하는지 Check 코드 def solution(s): if len(s) != 4 and len(s) != 6: return False check = True for i in s: if ord(i)>= ord("0") and ord("9") >= ord(i): continue else:..

세무민의 알고가자 : 프로그래머스 같은 숫자는 싫어 문제 풀기 [부제 : for와 while의 시간 차이]

오늘 풀어 볼 문제는 같은 숫자는 싫어! 사실 이 문제는 그냥 포스팅 할 생각이 없었지만 for문과 while문의 속도 차이로 문제 풀이가 달라져서 포스팅 하게 됬다. 문제 설명 & 입출력 예시 풀이 이번 문제는 set을 사용하면 안되는 문제! set은 중복되는 값을 다 제거하기 때문! 따라서 이번 문제는 while문이나 for문으로 접근하는 것이 중요합니다. 문제가 쉬워서 말 그대로 같은 값이면 continue를 해주면 되겠죠? 코드 def solution(arr): answer = [] count = 0 while len(arr) > 0: temp = arr[0] if len(answer) == 0: answer.append(temp) elif answer[count] == temp: arr = ar..