5일차 문제

양진혁·2021년 11월 5일
0

문제풀이

오늘은 총 세문제를 풀었다.

첫번째 문제는 난이도 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에 넣었다.

배운점 및 반성할점

오늘도 문제를 풀고 다른사람들의 답변을 보니 내 코드가 많이 더럽다 라는 생각이 들었다. 다른사람들의 답변을 보면서 나 또한 점점 깔끔하게 해야겠다는 마음가짐을 배울 수 있었다.
오늘은 일이 많고 피곤했다는 이유로 세문제밖에 풀지 못했다. 주말에는 문제풀기 말고도 추가적으로 프로그래밍 전반에 걸쳐 공부하고 정리해야겠다.

0개의 댓글