2017년 11월 돌아보기

|

1

블로그를 좀 더 가벼운 마음으로 사용해야겠다는 생각을 한다. 그동안은 글을 하나 올리려고 해도 격식을 차리고 길게 써야한다는 부담이 있었다. 앞으로는 한줄짜리 글이라도 편하게 올려야지 (이렇게 아무말 대잔치 블로그가 되어가고..) 뭐 누군가에게는 도움이 되겠지!

2

여동생과 처음으로 둘이서 여행을 다녀왔다. 항공권, 숙소, 버스 예약부터 맛집 검색, 여행 계획 전부다 내가 준비했는데 오랜만에 언니 노릇을 한 것 같아서 뿌듯했다.

3

일본에 간김에 해피해킹 키보드를 사왔다. 나의 유일한 일본여행 쇼핑

views
알베르 까뮈의 섬 서문이 생각나는 사진이다. (길거리에서 이 조그만 책을 열어본 후 겨우 그 처음 몇 줄을 읽다 말고는 다시 접어 가슴에 꼭 껴안은 채 마침내 아무도 없는 곳에 가서 정신없이 읽기 위하여 나의 방에까지 한걸음에 달려가던 그날 저녁으로 되돌아가고 싶다.)

4

DRF + 리액트 강의를 결제하고 듣기 시작했다. 그동안 API가 뭔지 감이 안잡혔는데 강의를 들으니까 쉽게 이해가 가서 기분이 좋았다. DRF만 강의 갯수가 75개인데 짧아서 한번 듣고 또 한번 들었다. 덕분에 이번달도 휴대폰 데이터 폭탄 ㅠㅠ 이번에 다시 한번 느낀건 ‘나는 강의가 있어야 배울 수 있는 사람인가..ㅠㅠ’하는 점이다. DRF 같은 경우도 공식 홈페이지에서 문서를 보면서 몇번을 익혀보려고 시도했는데 모두 효과가 좋지 않았다. 근데 강의를 따라가면서 한번 쭉 실습해보니까 문서 볼때보다 훨씬 이해가 잘되서 놀랐다. 강의가 있어야만 이해할 수 있다는건 좋은 것 같지 않은데.. 걱정도 되고 다른 사람들은 어떻게 새로운걸 학습하는지 궁금하기도 하다.

5

DRF 여운이 가시기 전에 다시한번 혼자서 연습할지 리엑트로 진도를 나갈지 고민이다. 11월은 요것들 공부하는 재미로 보낸것 같다.

6

회사에 들어와서 처음으로 참여한 (본격) 프로젝트가 잘 마무리되었다. 좋은 선배님 덕분에 배운점도 느낀점도 많았다. 절묘하게 내가 할 수 있을 만한 일들이 (물론 나는 처음에 못할거라고 생각했다..) 적절하게 분배된 덕분에 재미도 있었다. 참 오랜만에 스스로 원해서 휴일에도 일하고 즐거웠다…후후후

7

벌써 12월이다. 벌써부터 약속들이 잡혀있는데 (파이썬 연말 세미나도 가기로 했다) 공부는 언제하지!

장고 쿼리셋 합치기

|

앞으로 가벼운 마음으로 블로그를 하기로 결심했으니 기념으로 짧은 글을 올려보자

쿼리셋 2개를 합치고 싶을때는 간단하게 |를 사용하면 된다. 대신 같은 모델에서 나온 쿼리셋만 합칠 수 있다.

q3 = q1 | q2
  • Django 1.11부터는 qs.union()메소드를 이용할 수 있다. 그 밖에도 쿼리셋간의 합집합, 교집합, 차집합을 만들 수 있는 메소드가 추가되었다. (intersection(), difference())
  • itertools.chain을 사용하는 방법도 있다.

hackerrank - Nested Lists

|

문제출처

문제

Given the names and grades for each student in a Physics class of  students, store them in a nested list and print the name(s) of any student(s) having the second lowest grade.

Note: If there are multiple students with the same grade, order their names alphabetically and print each name on a new line.

Input Format

The first line contains an integer, , the number of students.
The  subsequent lines describe each student over  lines; the first line contains a student's name, and the second line contains their grade.

Constraints

There will always be one or more students having the second lowest grade.
Output Format

Print the name(s) of any student(s) having the second lowest grade in Physics; if there are multiple students, order their names alphabetically and print each one on a new line.

Sample Input

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
Sample Output

Berry
Harry

풀이코드

  • 두번째로 작은 점수를 찾는다
  • 해당 점수를 가진 사람 이름을 출력한다
score_list = []
for _ in range(int(input())):
    name = input()
    score = float(input())
    score_list.append([name, score])
second_highest = sorted(set([score for name, score in score_list]))[1]
print('\n'.join(sorted([name for name, score in score_list if score == second_highest])))

배운점

>>>from operator import itemgetter, attrgetter

>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

hackerrank - Finding the percentage

|

문제출처

문제

You have a record of  students. Each record contains the student's name, and their percent marks in Maths, Physics and Chemistry. The marks can be floating values. The user enters some integer  followed by the names and marks for  students. You are required to save the record in a dictionary data type. The user then enters a student's name. Output the average percentage marks obtained by that student, correct to two decimal places.

Input Format

The first line contains the integer , the number of students. The next  lines contains the name and marks obtained by that student separated by a space. The final line contains the name of a particular student previously listed.

Constraints

Output Format

Print one line: The average of the marks obtained by the particular student correct to 2 decimal places.

Sample Input

3
Krishna 67 68 69
Arjun 70 98 63
Malika 52 56 60
Malika
Sample Output

56.00

풀이코드

n = int(input())
student_marks = {}
for _ in range(n):
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores
query_name = input()
score_list = student_marks[query_name]
print("{0:.2f}".format(sum(score_list) / len(score_list)))

배운점

>>> one, *others = [1, 2, 3, 4, 5]
>>> one
1
>>> others
[2, 3, 4, 5]
>>> print("{0:.2f}".format(56.000))
56.00

leetcode 657. Judge Route Circle

|

문제출처

문제

Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.

The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R (Right), L (Left), U (Up) and D (down). The output should be true or false representing whether the robot makes a circle.

Example 1:

Input: "UD"
Output: true

Example 2:

Input: "LL"
Output: false

풀이코드

  • 풀이 1
    def judge_circle(moves):
      """
      :type moves: str
      :rtype: bool
      """
      location = [0, 0]
      for direction in moves:
          if direction == "R":
              loaction[1] += 1
          if direction == "L":
              loaction[1] -= 1
          if direction == "U":
              loaction[0] += 1
          if direction == "D":
              loaction[0] -= 1
      return True if location.count(0) == 2 else False
    
  • 풀이 2
    def judge_circle(moves):
      """
      :type moves: str
      :rtype: bool
      """
      location = [0, 0]
      dic = {
          "R": [0, 1],
          "L": [0, -1],
          "U": [1, 0],
          "D": [-1, 0]
      }
      for direction in moves:
          location = [a+b for a, b in zip(location, dic[direction])]
      return True if location.count(0) == 2 else False
    

다른사람풀이

  • 간단하다! 앞으로는 좀 쉽게 생각해보자
def judge_circle(moves):
    """
    :type moves: str
    :rtype: bool
    """
    return moves.count("U")==moves.count("D") and moves.count("L")==moves.count("R")