목록PYTHON (56)
오랑우탄의 반란

오늘도 오랑이는 문제를 풉니다. 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..

오늘도 오랑이는 문제를 풉니다. 이상한 문자 만들기 풀이 과정해당 문제는 아래와 같이 단계별로 쪼개서 생각해볼 수 있습니다. 1. 각 단어들을 공백 기준으로 나눈다 .split()2. 단어 내의 인덱스 위치를 짝/홀로 나눈다 for문, if 문3. 짝/홀 인덱스 위치에 대해 대문자/소문자가 나오도록 한다 .upper() .lower()4. 결과값을 미리 설정해둔 빈 문자열 변수에 쌓아둔다 변수 += 값5. 해당 변수를 출력한다 우선 전체 문자열 s 의 각 단어들을 공백 기준으로 나눠주고 마지막에 출력값을 쌓아둘 빈 문자열 변수를 설정해줍니다. def solution(d): s = s.split(' ') answer = '' for문을 사용해 s 의 각 단어들에 대해 각 조건을 적용시킨 후 띄어쓰기 ..

오늘도 오랑이는 문제를 풉니다. 3진법 뒤집기 풀이 과정3진법이 어떻게 작동하는지부터 알아봅니다. 3진법 ☞ 숫자를 3을 나눴을 때의 나머지와 최종 몫을 역순으로 정렬해서 반환예) 숫자 = 45 일 때 n(3진법) = 1200예) 숫자 = 125일 때 n(3진법) = 11122 즉 3진법대로 숫자 n을 몫이 0이 될 때까지 3으로 나눠서 나머지를 차례대로 정렬하면 문제에서 요구한 '앞 뒤 반전 3진법' 결과물이 이미 나오는 걸 볼 수 있습니다. 밑줄 친 부분에 대해서 while 반복문으로 코드를 작성하면 아래와 같습니다. 결과물을 저장해둘 변수 설정도 잊지 맙시다. 이때 주의해야 할 점은 answer += str(r) 처럼 r 를 문자열로 변환해줘야 answer 에 적재가 된다는 점입니다. ..

오늘도 오랑이는 문제를 풉니다. 최대공약수와 최소공배수 최대공약수, 최소공배수의 특징을 알고 활용하는 문제입니다.1. 최대공약수 = 두 수 중 큰 수를 작은 수로 나눴을 때의 나머지 값 m%n2. 최소공배수 = 두 수의 곱을 최대공약수로 나눈 값 (m*n) / (m%n) 그래서 아래와 같이 풀었는데 어김없이 틀렸습니다. 입력이 9, 7 일 때의 케이스에 대한 나머지 계산이 더 필요하기 때문입니다. def solution(n, m): b, a = max(n,m), a = min(n,m) if b%a == 0: answer = [a,b] else: answer = [b%a,(b*a)/(b%a)] return answer 가장 간단한 풀이는 아래와 ..