요즘 포폴보다 코딩테스트에 중점을 두고 공부하고 있다. 코딩테스트 문제를 풀때마다 매번 어렵다...
처음에는 아직 공부를 안해서 그렇지 공부하면 나중엔 어느정도 풀지 않을까? 하고 자신 있었는데 자신감을 점점 잃어갔다.
그래도 꾸준히 공부했으니까 뭔가 얻은건 있지 않을까해서 프로그래머스 스킬체크 Level-2를 도전해봤다.
(예전에 Level-1을 뚝딱 못풀었기도 했고, 2레벨 연습문제를 풀때도 은근 어려웠어서 Level-2 도전에 대해서 조금 겁이 났었다.)
사용 언어 Python3
def solution(s):
answer = ''
s=s.split(" ") # 문장을 공백 기준으로 단어로 쪼갠다.
for i in range(len(s)):
for j in range(len(s[i])):
if(j==0): # 첫자리의 경우 알파벳이면 대문자로
if(s[i][j].isdigit()==False):
answer+=s[i][j].upper()
else:
answer+=s[i][j]
else: # 2~n자리일때 대문자는 소문자로
if(s[i][j].isupper()):
answer+=s[i][j].lower()
else:
answer+=s[i][j]
answer+=" "
answer=answer[:-1]
#print(answer)
return answer
간단한 문자열 처리 문제였다. 처음에 보고 Level-2 문제가 맞나? 싶었다.
백준으로 치면 브론즈 난이도 느낌??
문장을 주고 각 단어들의 첫 자리는 대문자, 그 이외는 소문자로 변경하는 문제였다.
파이썬의 .lower(), .upper()를 이용해 간단하게 통과할 수 있었다.
첫번째 문제를 의외로 간단하게 통과했다. 너무 쫄았었나 ㅎㅎ..
def solution(record):
answer = []
dict={} # 유저 아이디별 닉네임을 저장하기 위해 딕셔너리 사용
for i in range(len(record)):
record[i]=record[i].split(' ')
for i in range(len(record)):
if(record[i][0]=='Enter' or record[i][0]=='Change'):
dict[record[i][-2]]=record[i][-1]
#elif(record[i][0]=='Leave'):
# del dict[record[i][-1]]
for i in range(len(record)):
if(record[i][0]=='Enter'): # Enter 명령어는 Enter, uid, name
answer.append(dict[record[i][-2]]+"님이 들어왔습니다.")
elif(record[i][0]=='Leave'): # Leave명령어는 Leave, uid 뿐
answer.append(dict[record[i][-1]]+"님이 나갔습니다.")
return answer
딕셔너리를 이용해야 하는 문제였다. 남은시간은 50분.
딕셔너리 문제를 자주 접하지 않아 헉 했다. 일단 딕셔너리 기본 문법부터 찾아보고..
기본 문법을 보고나니 어떻게 풀어야할지 아이디어가 생각났다. 그리고 생각을 코드로 옮겼다.
근데 런타임 에러로 3.1/50점 받았다.
분명 맞는데.. 하면서 코드를 다시 한줄씩 살펴봤다.
4번 부분에서 문제가 있었다.
#elif(record[i][0]=='Leave'):
# del dict[record[i][-1]]
생각해보니까 del 처리를 해주면 안된다. 왜냐, 여기서 지워버리면 출력할때 떠난사람의 닉네임을 출력을 할 수가 없었다.
그래서 이 부분을 주석처리해서 제출했더니 통과했다!!
그래도 공부했던게 아예 효과가 없는건 아니었나보다. 다행이다.
- 문제를 보고 어떻게 풀어야 할지 펜으로 종이에 적어본다.
- 푸는 방법을 알았으면 바로 코딩
- 전혀 모르겠으면 구글에서 다른 분들의 여러가지 코드를 본다.
- 다른 분들의 코드를 보고 이해 했으면 보지않고 코딩
- 코드를 암만봐도 이해가 안가면 코드를 보면서 따라 써본다.
- 코드를 따라쓰되 코드를 쪼개 돌려보면서 이 부분이 어떻게 돌아가는지 공부한다.
- 그래도 이해가 안간다. 그러면 해당 문제의 카테고리(bfs, dp, queue)등등에서 쉬운 문제부터 시도 해본다.
- 반복
처음에 공부할때 5번에 해당하는 경우가 은근 많았었다 ㅎㅎ.. 해도해도 안늘고.. 공부 방법이 잘못됐나? 생각도 들었다.
처음에는 브론즈 문제 정도만 할만 했었다.
근데 요즘은 실버 문제나 쩔쩔매던 탐색 문제들을 내 힘으로 조금씩 풀기도하고, 마침 오늘 Level-2도 통과한거 보면 아주 틀린 공부 방법은 아니었다보다.
다음 목표는 Level-3 통과다.