오늘은 총 4문제를 풀었다.
첫번째 문제는 6kyu 문제로
wave("hello") => ["Hello", "hEllo", "heLlo", "helLo", "hellO"]
즉 파도타기 문제였다.
def wave(people): result_list = [] for i in range(len(people)): people = people.lower() peoplelist = list(people) if peoplelist[i].isalpha(): peoplelist[i] = people[i].upper() people = ''.join(peoplelist) result_list.append(people) return result_list
띄어쓰는 공간을 신경쓰지 않고 풀었지만 예시에 two words 라는 단어 때문에 알파벳인지 빈공간인지 확인하는 isalpha()를 써서 영어인 경우 대문자로 바꿔줬다.
두번째 문제는 6kyu 문제로
to_weird_case('String'); # => returns 'StRiNg'
to_weird_case('Weird string case') # => returns 'WeIrD StRiNg CaSe'
즉 홀수는 소문자 0부터 시작해서 짝수는 대문자로 만든다. 빈 공백이 생긴 후 단어는 다시 0부터 시작해야한다.
def to_weird_case(string): o = 0 r = '' for i in string: if o %2 == 0: r += i.upper() else: r += i.lower() if i == " ": o = 0 else: o +=1 return r
순서를 0으로 지정해놓고 result라는 빈 변수를 만든 후 2로 나눠 나머지가 0인 경우 대문자 아닌경우 소문자로 지정해주고 만약 i가 빈 공백인경우 다시 0으로 바꿔준다.
세번째 문제는 6kyu 난이도 문제로
16 --> 1 + 6 = 7
942 --> 9 + 4 + 2 = 15 --> 1 + 5 = 6
132189 --> 1 + 3 + 2 + 1 + 8 + 9 = 24 --> 2 + 4 = 6
493193 --> 4 + 9 + 3 + 1 + 9 + 3 = 29 --> 2 + 9 = 11 --> 1 + 1 = 2
1자리 수가 될 때까지 결과값을 더하는 것이다.
def digital_root(n): result = 0 while n>=10: for i in str(n): result +=int(i) n = result result = 0 return n
while문을 사용해서 n이 두자릿수일때 계속 반복될 수 있게 작성했고
result에 결과값을 넣고 그 값을 n에 넣어주고 result를 다시 0으로 초기화해서 n이 한자리가 될 때까지 반복할 수 있도록 했다.
네번째 문제는 6kyu 난이도 문제로
parse("iiisdoso") ==> [8, 64]
i는 더하기
s는 제곱근
d는 마이너스
o는 출력을의미한다.
def parse(data): result = [] res = 0 for i in data: if i == "i": res+=1 elif i == "d": res -=1 elif i == "s": res**=2 elif i == "o": result.append(res) else: pass return result
마지막 문제를 풀고 나니 단계가 6kyu로 승급했다.
오늘 배운것은 isalpha()를 통해서 알파벳만 걸러낸 후 코드를 작성하는 법을 배웠고, 평소에 반복문을 사용할 때 for문을 위주로 사용했지만 3번째 문제를 풀면서 while문을 오랜만에 사용할 수 있었다.
느낀점은 처음 문제 풀 때 너무 느린 속도와 길어보이는 코드때문에 부끄러워서 올리기를 꺼려했다. 하지만 점점 푸는 속도도 빨라지고 느리더라도 천천히 발전하는 모습을 올리는게 중요하다는 것을 느꼈다.
앞으로 취업에 쓰이는 코딩 테스트 풀이와 자료고주 등 많은 것을 업로드 해야 겠다.