튜터님 피드백
1. 강의 -> 스파르타 강의는 보지 않는다. (단, Spirng 심화 강의는 듣기)
Spring 강의는 인프런 꺼로 듣는다.
2. 알고리즘 java & python -> python
백준 알고리즘 -> 프로그래머스
1. 현업에서의 개발
프로그래밍 공부 어떻게 할 것인가 강의 들어보기
2. 스프링 강의는 인프런 강의를 듣기로 했다.
3. 알고리즘
백준은 대회 문제도 있으므로 프로그래머스가 낫다라는 피드백을 받아 Lev.1 부터 시작하게 되었다.
Spring을 하기 때문에 당연히 java로 문제를 풀려고 했는데 파이썬의 장점을 살리는게 좋다고 하셨다.
실제로 Spirng 백엔드로 간다 해도 내가 하고자 하는대로 쓸 수 있는 언어를 활용하는 것이 좋다 하셨다.
오후 12시경 프로그래밍 공부 어떻게 할 것인가
비교연구
내가 잘 하는 부분이랑 그렇지 못한 부분을 나열해본다.
그리고 이 두 그룹간에 차이점을 찾아본다. 어떤 식으로 다르게 공부를 했는지
마찬가지로 주변 사람들에서 어떤 것을 잘하는지 또, 어떻게 그렇게 뛰어나게 되었는지
그렇지 못한 거는 어떻게 공부를 했는지 어떻게 다르게 공부했는지에 대한 차이가 나온다.
오후 1시경 정규 표현식
튜터님이 피드백 하신 것 중 책을 추천하는 과정에서 지금 현재 나에겐 어려워서
추천하지 않고 나중에 실력이 쌓이면 읽어보면 좋을 것이라며 정규표현식이라는 말이 나왔다.
정규표현식이 뭘까? 팀원이 정규 표현식의 하나의 예시를 설명해 줬다.
* 문자열에서 규칙을 이용해 원하는 값들을 찾아 내는 형식이라고 보면 된다.
a="오렌지2딸기1복숭아3키위2" 일 때
과일이 몇 개인지 읽어라 라는 문제를 냈다고 가정, 어떤 규칙을 세워야 할까?
a = [읽는 규칙 작성] → [문자+숫자]
문자 다음에 숫자가 오면 그것을 읽어오게 하자!
-> "오렌지2","딸기1","복숭아3","키위2"
다른 예시로 이 전에 알고리즘 풀었던 문제로 보여줬다.
처음에 봤을 떄 lje에서 e는 마지막 조건에 해당되지 않기 때문에 li를 작성한다.
그 다음에 왜 e는 빠진 걸까? e가 첫번째 인데?
li는 이해가 되었을 테니 "es=njak"로 새롭게 시작을 한다.
1번 조건은 d가 아니어도 되기 때문에
2번조건이 e에 해당한다.
3번 조건은 s에 해당이 되지 않기 때문에 e는 제외되는 것이다.
그 다음 "s=njak"로 시작을 한다.
1번 조건은 d가 아니어도 되므로 2번조건이 s에 해당된다.
3번 조건도 '='가 해당되기 때문에 s=이 k 안에 넣어진다.
d가 첫번째 문자열로 없으면 첫 번째 문자열이 2번째 조건으로 사용되고
두 번째 문자열이 3번째 조건으로 사용된다.
만약 첫 번째 조건이 해당이 된다면 2번째 조건은 두번 째 문자열, 3번째 조건은 세 번째 문자열에 해당된다.
다른 예시를 들어서 2번째 조건인 a-z 대신 [A-Z]?으로 하면
세번째 문자열에서 1~3번째 문자열로 3번째 조건을 확인한다
근데 이렇게 해도 처음은 lj가 나온다
왜냐면 마지막 조건이 마지막 끝 단어가 무조건 = 또는 j 또는 - 로 나와야 하기 때문이다.
오후 2시경 프로그래머스 알고리즘 문제 "완주하지 못한 선수" 를 맞닥뜨리다!
처음 시작은
participant에 있는 이름이 completion에 없는 경우
participant에 동일 이름이 2명 있는데 completion에는 한명만 있는 경우
이 부분을 코드로 작성을 해봤다.
1차시도
from collections import Counter
def solution(participant, completion):
answer = ''
for i in participant:
if i not in completion:
answer = i
else:
cnt = Counter(participant)
for key, value in cnt.items():
if value >= 2:
answer = key
return answer
[참고] 중복된 값 찾기/제거
생각을 해보니 중복된 값이 a, a, b, b, b 인 경우 a와 b 둘 다 출력이 되므로
정렬 후 가장 마지막 값만 출력되게 코드를 수정했다.
2차 시도
from collections import Counter
def solution(participant, completion):
answer = ''
for i in participant:
if i not in completion:
answer = i
else:
cnt = Counter(participant)
for key, value in cnt.items():
com_list = sorted(cnt.items(), key=lambda x: x[1])
if value >= 2:
answer = com_list[-1][0]
return answer
예제에 있는 출력은 다 맞췄는데 효율성 부분이랑 테스트 1, 2, 3, 4, 5번 맞추느라 애를 먹었다.
이번에는 2차 시도 코드에서 아래 부분을 위로 옮겨 실행해봤다.
3차 시도
from collections import Counter
def solution(participant, completion):
cnt = Counter(participant)
for key, value in cnt.items():
com_list = sorted(cnt.items(), key=lambda x: x[1])
if value >= 2: # 그 이상이 나오면
answer = com_list[-1][0]
for i in participant:
if i not in completion:
answer = i
return answer
[참고] python3 정렬
4차 시도
def solution(participant, completion):
participant = sorted(participant)
completion = sorted(completion)
for i in range(len(completion)):
if participant[i] != completion[i]:
answer = participant[i]
return answer
else:
answer = participant[-1]
return answer
range 설정은 completion이 participant보다 개수가 1개 적으므로
completion으로 설정했다. (그렇지 않으면 한 개가 비어 있기 때문에)
위 코드에서 else를 없애고 for문을 바깥으로 뺐더니 성공이 되었다.
그 이유에 대해서 설명해보기 위해 아래 예시를 하나 만들었다.
participant = ["mislav", "dtanko", "ana","frank", "han"]
completion =["mislav", "ana", "frank", "han"]
원래 나와야할 값은
dtanko가 나와야 하는데
출력 값은 han으로 뜬다.
그림으로 설명하자면
첫 번째를 제외하고는
모두 같지 않게 출력이 된다.
그래서 마지막 값인 han이
return에 띄워진다.
동일한 값으로 아래 코드를 예시로 들어본다.
최종 코드
def solution(participant, completion):
participant = sorted(participant)
completion = sorted(completion)
for i in range(len(completion)):
if participant[i] != completion[i]:
answer = participant[i]
return answer
answer = participant[-1]
return answer
ana는 같으므로 pass가 되었고
dtanko와 frank는 다르므로
바로 return 으로 출력되어
다른 값들은 비교하지 않고 출력 되었다.
이것이 가능한 이유는
participant와 completion에서
다른 사람 한명만 찾으면 되는 것이므로
끝낼 수 있는 것이다.
[참고] [프로그래머스] (Python) - 완주하지 못한 선수 Lv1
Best code 보기
아래는 Best code이다.
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0] # mislav
print(solution(participant, completion))
Best code의 return 코드가 이해가 되지 않아서 하나씩 줄여가며 실행을 하다가
아래 코드처럼 줄여도 똑같은 답이 나와서 프로그래머로 실행을 시켜보니 통과되었다.
그렇다면 왜 썼을 까?
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer)[0]
오후 9시경 노션 정리 _ HTML
HTML을 요약하면 아래와 같다.
인류가 생산하는 거의 모든 디지털 정보가 담기는 그릇이 바로 웹페이지이고
이러한 웹페이지를 만드는 컴퓨터 언어가 HTML이다.
[참고] 코딩과 HTML
오후 10시 이후
TIL을 쓰면서 느낀 것이 오늘도 Spring 강의를 많이 듣지 못했다.
Spring 강의를 듣는게 중요하지만
튜터님의 피드백으로 일정의 변화가 생기면서
이를 수정하게 되느라 강의를 많이 듣지 못했다.
실강을 듣는 곳이나 어떤 책을 참고할지, 알고리즘은 어떻게 진행할지 정도를 다시 잡게 되었고
프로젝트를 진행하는데 있어서 다음주에 다시 피드백을 받아야 할 것 같다.
너무 늦게 시작하는 것 같지만
그만큼 어떻게 나아가야하는지 방향성을 빨리 잡게 되어서 다행이다.
- 모험가 haedal
'TIL' 카테고리의 다른 글
96일차(모험 5일차) - 프로젝트 틀 작성 (0) | 2021.12.17 |
---|---|
95일차 (모험 4일차) (1) | 2021.12.16 |
93일차(모험 2일차) (0) | 2021.12.14 |
92일차(모험 1일차) (0) | 2021.12.14 |
90일차(내가 팀 프로젝트를 그만 하려는 이유2) (0) | 2021.12.11 |