목록Python (27)
오랑우탄의 반란
오늘도 오랑이는 문제를 풉니다. 가장 가까운 같은 글자 풀이 과정문자열 s의 글자 s[i]에 대해 1) 처음 나온 경우와 2) 그 외 두 경우로 나눠서 설계해야 하는 문제입니다. def solution(s): answer = [] for i in range(len(s)): if : #조건 answer.append() #가장 가까운 글자와의 자릿수 차이 else: answer.append(-1) return answer 처음에는 조건을 'for i in s' 라고 생각했지만 그렇게 되면 전체 범위에 대해 조건이 적용되어 모든 글자에 대해 동일한 값을 출력하게 됩니다. 그렇기 때문에 더 구체적인 범위를 설정해줘야 합니다. ..
오늘도 오랑이는 문제를 풉니다. 문자열 내 마음대로 정렬하기 풀이 과정sort 함수의 특징 활용을 의도한 문제입니다. 기존에는 자동으로 오름차순 정렬이 되는 .sort, sorted() 그리고 내림차순 정렬 조건 reverse = True 만 알고 있었는데 key = 를 사용하면 조건을 자유롭게 줄 수 있다는 사실을 알게 되었습니다. sort 함수answer.sort(key = 조건)sorted(answer, key = 조건) 조건에 함수가 들어갈 경우 key = lambda x: 로 람다함수를 사용해서 넣어주면 됩니다. 생각보다 간단하네요 다중 조건을 주고 싶은 경우 쉼표로 구분하거나 lambda 함수를 사용했을 경우 함수 안에 쉼표 구분으로 넣으면 됩니다. 내림차순으로 정렬할 경우도 마찬가지로 쉼표..
오늘도 오랑이는 문제를 풉니다. 두 개 뽑아서 더하기 풀이 과정리스트의 combination 을 구해서 각각의 값을 더하는 문제입니다. 전에 비슷한 문제가 있었는데 어떤 거였는지 기억이 안 나네요..어쨌든 전과 동일하게 numbers 의 i 와 i+1 인 j 에 대해 각각 추출해서 더하면 됩니다.def solution(numbers): answer = [] for i in range(len(numbers)): for j in range(i+1,len(numbers)): answer.append(numbers[i]+numbers[j]) return sorted(answer) 다만 위와 같이 작성했더니 중복값이 나와서 틀렸습니다.파이썬 중복값 제거를 위해서는 ..
오늘도 오랑이는 문제를 풉니다. K번째수 풀이 과정commands 리스트의 a에 대해서 i, j 를 각각 인덱스로 출력해 num 에 넣어줍니다. 그리고 num 안의 b 에 대해 정렬을 해준 후 k 에 해당하는 값을 answer 에 넣어줍니다.처음에는 append 안에 pop을 썼는데 자꾸 인덱스 범위가 벗어났다는 오류가 떠서 막혔다가 생각해보니 굳이 pop을 안하고 인덱스로 리스트값을 반환하면 되는 거여서 그렇게 작성했습니다. def solution(array, commands): answer = [] num = [] for a in commands: num.append(array[a[0]-1:a[1]]) for b in num: b.sort..
오늘도 오랑이는 문제를 풉니다. 숫자 문자열과 영단어 풀이 과정2021 카카오 채용연계형 인턴십 문제라길래 조금 쫄았지만 생각보다 개념적인 부분을 확실히 하고 있는지 확인하는 간단한 문제였습니다. 코드를 기깔나게 짜는 것도 언젠가는 중요하겠지만 뭐든 개념부터 확실하게 제대로 배웠는지가 우선인 것 같습니다. 하지만 딕셔너리 작성이 귀찮았던 오랑이는 리스트로 문제를 풀었습니다. 리스트의 값에 대해서, s에 포함된 경우 s의 문자를 해당 인덱스값으로 교체해주는 코드입니다. def solution(s): num = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] for i in num: if..
오늘도 오랑이는 문제를 풉니다. 시저 암호 풀이 과정알파벳 str 을 직접 만들어서 써야 하는 문제입니다. 저는 대문자, 소문자 둘 다 만들기 귀찮아서 하나만 만들어서 활용했습니다. 나중에 다른 사람들의 풀이를 보니 따로 str 작성 없이 함수를 활용해서 간단하게 푸는 방법이 있더군요 ! (정석풀이) 역시 오랑이는 아직 갈 길이 멉니다~ 1차 풀이를 살펴봅시다.각각 소문자, 대문자, 공백에 대한 경우를 나눠서 계산하도록 해야 합니다. 이때 z → a 로 알파벳이 이어지게 하는 게 중요한데, 처음에는 25를 기준으로 25보다 작으면 j, 아니면 (j-26) 형식으로 생각했는데 필요 이상으로 if문이 많아져서 ('아 이렇게 지저분할 일이 없어' 라는 생각으로 풀었읍니다..) 그보다 간단하게 26으로 나눈 나..
오늘도 오랑이는 문제를 풉니다. 최소직사각형 풀이 과정왜인지 모르겠으나 문제를 복잡하게 생각해서 리스트 조작을 두번씩이나 하면서 복잡하게 풀어버렸습니다. 거대해진 코드..def solution(sizes): w = [] h = [] for i in range(len(sizes)): w.append(max(sizes[i][0], sizes[i][1])) h.append(min(sizes[i][0], sizes[i][1])) w.sort(reverse = True) h.sort(reverse = True) return w[0]*h[0] 하지만 이 문제는 max 함수의 속성을 잘 이해하고 있으면 한 줄로 세상 간단하게 풀 수 있는 정말 파..
오늘도 오랑이는 문제를 풉니다. 삼총사 풀이 과정리스트의 각 인덱스 값이 출력되도록 for문으로 i, j, k 의 범위를 설정해줍니다.i는 0~, j 는 i를 제외하도록 i+1~, k는 i와 j 를 제외하도록 j+1 을 시작점으로 설정해줍니다. 각 인덱스에 대해 출력되는 값을 더한 것이 숫자 3개의 조합이 됩니다. def solution(number): for i in range(len(number)): for j in range(i+1,len(number)): for k in range(j+1,len(number)): answer = number[i]+number[j]+number[k] 숫자 3개의 합이 0이 되면 '삼총사'이기 때문에 i..