오늘은 총 세문제를 풀었다.
첫번째 문제는 난이도 5kyu로
"#FF9933" --> {r: 255, g: 153, b: 51}
즉 16진수로 되어있는 코드를 10진수로 바꾸어 rgb 자리에 표시하는 것이다.
def hex_string_to_RGB(hex_string): r = 0 g = 0 b = 0 hex_string = hex_string.lstrip("#") for i in (0,2,4): if i == 0: r = (int(hex_string[i:i+2], 16)) elif i == 2: g = (int(hex_string[i:i+2], 16)) else: b = (int(hex_string[i:i+2], 16)) return {"r":r, "g":g, "b":b}
lstrip()을 사용해서 #을 지워주고 for문과 if문을 이용해서 두개씩 끊어서 10진수로 변화시켜 각 자리에 입력해주는 방법으로 문제를 풀었다.
두번째 문제 난이도는 5kyu로
rot13("EBG13 rknzcyr.") == "ROT13 example.";
rot13("This is my first ROT13 excercise!" == "Guvf vf zl svefg EBG13 rkprepvfr!"
rot13이란 알파벳을 13글자씩 밀어서 만드는 것이다.
def rot13(message): message = str(message) new ="" for i in range(len(str(message))): if message[i].isupper(): if 65<=ord(message[i])<=77: new += chr(ord(message[i]) + 13) else: new += chr(ord(message[i]) - 13) elif message[i].islower(): if 97<=ord(message[i])<=109: new += chr(ord(message[i]) + 13) else: new += chr(ord(message[i]) - 13) else: new +=message[i] return new
아스키 코드로 변환시켜 소문자의 경우, 대문자의 경우 둘 다 아닌 경우 를 만들어서 처리하는 방식으로 코드를 작성했다.
세번째 문제는 5kyu 난이도로
"TestController" --> "test_controller"
"MoviesAndBooks" --> "movies_and_books"
"App7Test" --> "app7_test"
1 --> "1"
즉 pascal case를 snake case로 변환시키는 것이다.
def to_underscore(string): string = list(str(string)) new = string[0].lower() for i in range(1, len(string)): if string[i].islower(): new+=(string[i]) elif string[i].isupper(): new+="_" new+=string[i].lower() else: new+=(string[i]) return new
string의 첫자는 무조건 소문자로 넣었고 그 다음 대문자가 발생하면 앞에 _를 넣고 대문자를 소문자로 바꿔서 new에 넣었다.
오늘도 문제를 풀고 다른사람들의 답변을 보니 내 코드가 많이 더럽다 라는 생각이 들었다. 다른사람들의 답변을 보면서 나 또한 점점 깔끔하게 해야겠다는 마음가짐을 배울 수 있었다.
오늘은 일이 많고 피곤했다는 이유로 세문제밖에 풀지 못했다. 주말에는 문제풀기 말고도 추가적으로 프로그래밍 전반에 걸쳐 공부하고 정리해야겠다.