내일배움캠프/내일배움캠프 TIL

내일배움캠프 TIL 38일차

sogummi 2023. 5. 4. 01:10

AWS 완강! 강의에 개념적인 용어들이 많이 나와서 복습하면서 정리할 예정
학교 C프로그래밍 과제하는데 Dev-C++을 처음 사용해보았다. 

Today I Learned
- 재귀함수 풀이 / request / json / 파일 입출력에 대해 배웠다
프로그래머스의 같은 문제를 팀원들끼리 각자 풀이하여 노션에 공유하였다.

소은(나)

def solve_key(skip_list, _char, index): 
  n = 0
  _char = ord(_char)
  while True:
    _char += 1
    if _char > 122:
        _char -= 26
    if _char not in skip_list:
      n += 1
    if n == index:
      break
  return chr(_char)

def solution(s, skip, index):
    skip_list = list(map(lambda x: ord(x), skip))
    s_list = list(map(lambda x: solve_key(skip_list, x,index), s))
    answer = ''.join(s_list)
    return answer

다른 분들의 풀이

import string 
def solution(s, skip, index):
    words = [i for i in string.ascii_lowercase if i not in skip]
    answer = ''
    for i in s:
        idx = words.index(i)+index
        if idx < len(words):
            answer += words[idx]
        else:
            answer += words[idx % len(words)]
    return answer

 

def solution(s, skip, index):
    ans = ''
    slist= list(s)
    skip_list = list(skip)

    for i in slist:

        if 97 <= ord(i)+index <= 122:  # a가 알파벳 아스키코드 범위내에 있다면
            a = ord(i) + index
            for s in skip_list:
                if ord(i) < ord(s) <= ord(i) +index:
                    a += 1
                    if 122 < a :
                        a = a - 122 + 96
            ans += chr(a)

        elif 122 < ord(i)+index :
            a = ord(i)+index -122 + 96
            for s in skip_list:
                if ord(i) < ord(s) < ord(i) +index:
                    a += 1
                    if 122 < a :
                        a = a - 122 + 96
            ans += chr(a)
    return ans






- 훈희매니저님과 함께 페어프로그래밍을 했다. 매니저님이랑 처음에 풀었던 방식은 술술 풀렸는데 시간복잡도가 조금 벅찬 문제여서 다른 풀이로 시도했다! 정답률이 낮은 이유가 있었다.,
https://sogummi.tistory.com/117

프로그래머스 1레벨 - 달리기 경주

https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

sogummi.tistory.com

 
< 개인과제 수정 건 >

1. Todo apps의 views.py에 있는 delete 함수 수정
if문을 사용했던 것을 get_object_or_404()매개변수에 넣어서 코드를 더 깔끔하게 줄였는데 

user=request.user가 아닌 user=request.user.id로 넣어주어야 한다.

원인 : 
Todo/models.py의 user필드가 ForeignKey이기 때문!
User apps/models.py/User클래스에서 USERNAME_FIELD = "email"로 지정해놓은 상태라서,
print("request.user")를 해보면 유저의 이메일이 출력된다. 
때문에 request.user.id로 지정해줘야 제대로 삭제가 된다! 

class TodoDetailView(APIView):
    permission_classes = [permissions.IsAuthenticated]
    def get(self, request, id):
        article = get_object_or_404(TodoArticle, id=id)
        serializer = TodoSerializer(article)
        return Response(serializer.data, status=status.HTTP_200_OK)
    def put(self, request, id):
        article = get_object_or_404(TodoArticle, id=id)
        if request.user == article.user:
            serializer = TodoCreateSerializer(article, data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response("권한이 없습니다", status=status.HTTP_403_FORBIDDEN)
    def delete(self, request, id):
        article = get_object_or_404(TodoArticle, id=id, user=request.user.id)
        article.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

위 코드는 delete함수를 수정한 TodoDetailView클래스