반응형
n = int(input())

answer= 0 
array = [[0 for col in range(n+2)] for row in range(n+2)]

array[0] = [-1 for col in range(n+1)]
array[-1] = [-1 for col in range(n+1)]
for cols in array:
  cols[0] = -1
  cols[-1] = -1

rules = []
rules2 = {}
for i in range(n**2):
  rules.append(list(map(int,input().split())))
  rules2[rules[-1][0]] = rules[-1][1:]

for order in rules:
  student_num = order[0]
  temp_max = 0 
  temp_list= []
  for j in range(1,n+1):
    for k in range(1,n+1):
      if array[j][k] != 0:
        continue
      temp = 0
      if array[j+1][k] in order:
        temp +=1
      if array[j][k+1] in order:
        temp +=1
      if array[j-1][k] in order:
        temp +=1
      if array[j][k-1] in order:
        temp +=1

      if temp == temp_max:
        temp_list.append((j,k))
      if temp > temp_max:
        temp_max = temp
        temp_list=[(j,k)]


  #1번규칙
  # print(order)

  if len(temp_list) == 1:
    j,k = temp_list[0]
    array[j][k] = student_num
    # print(array)
    continue
  
  #2번 규칙
  temp_max2 = 0 
  temp_list2 = []

  for temp_locate in temp_list:
    j2,k2 = temp_locate
    temp2 = 0
    if array[j2+1][k2] ==0:
      temp2 +=1
    if array[j2][k2+1] ==0:
      temp2 +=1
    if array[j2-1][k2] ==0:
      temp2 +=1
    if array[j2][k2-1] ==0:
      temp2 +=1
    
    if temp2 == temp_max2:
      temp_list2.append((j2,k2))
    if temp2 > temp_max2:
      temp_max2 = temp2
      temp_list2=[(j2,k2)]

  if len(temp_list2) == 1:
    j3,k3 = temp_list2[0]
    array[j3][k3] = student_num
    # print(array)
    continue
  temp_list2.sort()
  j3,k3 = temp_list2[0]
  array[j3][k3] = student_num
  
for j4 in range(1,n+1):
  for k4 in range(1,n+1):
    target = array[j4][k4]
    temp3 = 0
    if array[j4+1][k4] in rules2[target]:
      temp3 +=1
    if array[j4][k4+1] in rules2[target]:
      temp3 +=1
    if array[j4-1][k4] in rules2[target]:
      temp3 +=1
    if array[j4][k4-1] in rules2[target]:
      temp3 +=1
    
    if temp3 ==1:
      answer +=1
    if temp3 ==2:
      answer += 10
    if temp3 ==3:
      answer += 100
    if temp3 ==4:
      answer += 1000

print(answer)

https://www.acmicpc.net/problem/21608

반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 2753번 파이썬  (0) 2021.10.11
백준 2501번  (0) 2021.10.10
이 카테고리에 관하여  (0) 2021.10.10
반응형
n,k = map(int,input().split())
temp = []
for i in range(1,n+1):
  if n%i ==0:
    temp.append(i)
  
if len(temp) >= k:
  print(temp[k-1])
else:
  print(0)

https://jaejin89.tistory.com/56

 

백준 2501. 약수 구하기 :: 돼지개발자

출저 : https://www.acmicpc.net/problem/2501 "구현" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.util.Scanner; public class Main {     static int N,K;     st..

jaejin89.tistory.com

 

https://inuplace.tistory.com/459

 

[알고리즘 연습] 약수 구하기 효율화 (by Python)

약수 효율적으로 구하기 1 이상의 자연수 n을 받았을 때 해당 수의 약수들을 구하라. 약수들은 리스트 형태로 숫자 크기 순서대로 출력하라. 단순 풀이 def get_divisor(n): n = int(n) divisors = [] for i in ra

inuplace.tistory.com

 

반응형
반응형

https://covenant.tistory.com/234

 

코딩테스트 시작을 위한 백준 문제 추천

코딩테스트 시작을위한 백준문제 추천 Source. Pixabay Philipp Kleindienst 시작하며 본 글은 코딩테스트를 시작하는 분들을 위한 글입니다. 올해 초 코딩테스트 대비를 위한 백준 문제 추천글을 작성하

covenant.tistory.com

 

1. 여기서 하라는대로 한다.

2. 파이썬 한번, 자바 한번 푼다.

 

 

반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 2753번 파이썬  (0) 2021.10.11
백준 상어초등학교 21608 파이썬  (0) 2021.10.11
백준 2501번  (0) 2021.10.10
반응형

발단

왜 프로세스와 스레드를 배우는지는 알겠다. 한정된 리소스를 효율적으로 관리하고, 최상의 아웃풋을 내기 위해서이다.

그런데 ENIAC 시절부터 프로세스와 쓰레드가 있었을까?

그건 아닐 것이다. 그러면 어떠한 이슈때문에 프로세스 쓰레드가 탄생하게 됐을까?

 

전개

사실 처음 공부한 자료에서는 이에 대해 잘 안나와있었는데, 공룡책을 참고하다보니 이에 대해 나와있었다.

 

프로세스 탄생 배경

 초기의 컴퓨터 시스템은 한번에 하나의 프로그램만을 실행하도록 허용했다. 따라서 프로그램이 시스템을 완전히 제어하고, 모든 자원에 접근해도 됐다. 그런데 메모리에 다수의 프로그램이 적재되어 병행실행되는 것이 허용되면서 다양한 프로그램을 보다 견고하게 제어하고 구획화할 필요가 생기면서 프로세스라는 개념이 탄생하게 되었다.
-운영체제 Abraham Silberschatz (공룡책) 10판, 117pg

 

 

쓰레드 탄생 배경

하나의 응용프로그램이 여러개의 비슷한 작업을 수행할 필요가 있는 상황들이 존재한다. 이때 각각의 프로세스를 생성하고 컨텍스트 스위칭을 한다면, 많은 오버헤드를 감수해야한다.

따라서 스택만 따로 할당받고, 코드,데이터, 힙영역은 공유하는 쓰레드가 탄생하게 되었다.

반응형
반응형

https://seoyeonhwng.medium.com/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-f04847b58286

 

파이썬 리스트 내부 구조

C언어의 배열과 파이썬의 리스트는 같은 자료형이지만 파이썬의 리스트가 훨씬 사용하기 편리하다. 그 이유는 아래와 같다.

seoyeonhwng.medium.com

 

파이썬 리스트를 구현해본 것을 까보면, 이중pointer로 되어있어서 그렇다.

쉡게 말하면 파이썬의 리스트는 원소의 주소값을 저장한다.

반응형

'computer 지식 > 파이썬' 카테고리의 다른 글

django 4.0 release!  (0) 2021.12.08
반응형

발단

이전에 프로젝트를 했을때, 왜 seriallizer를 사용하는지 몰랐다.

굳이 사용해야 싶나 했는데, marshmallow같은 라이브러리까지 있는거보면 필요성이 분명히 있으리라 생각하고 찾아보게 되었다.

 

전개

은근히 바로 안나왔는데, 그래도 결국 quora에서 찾았다.

https://www.quora.com/Do-I-really-need-serializers-in-Django-Rest-Framework-app

 

Do I really need serializers in Django Rest Framework app?

Answer (1 of 4): Yes, definitely use serializers! They save you from writing a lot of custom code. Let’s look at some examples. Pretend we have an app that tracks a list of tasks that the user has to complete by a certain date. The Task model might look

www.quora.com

 

 custom code의 양을 줄여준다.

serializer 없이 한두개 정도는 일일히 작성할 수 있지만, 현업에서 대량의 api를 만들어야 하는 경우, 이는 많은 노력이 들어가고 수정보완하기 까다롭게 된다.

 

반응형
반응형

발단

네트워크를 공부하다보니, 이 과목은 약간 통신규약을 배운다는 느낌을 접근해야겠다는 생각이 들었다.

그러면, 어떡하다가 그러한 protocol이 탄생하게 됐는지 궁금해졌다.

 

전개

TCP 개발동기는 나무위키에 잘나와있었다.

그런데 혹시 몰라서 팩트체크를 위해서 영어자료도 찾아봣는데, 아주 틀린정보는 아닌것 같다.

https://namu.wiki/w/TCP

https://en.wikipedia.org/wiki/Bob_Kahn

 

Bob Kahn - Wikipedia

American Internet pioneer, computer scientist This article is about the Internet pioneer. For the comic artist born "Robert Kahn", see Bob Kane. Robert Elliot Kahn (born December 23, 1938) is an American electrical engineer, who, along with Vint Cerf, firs

en.wikipedia.org

이 할아버지는 TCP를 만든 사람중에 하나인데, TCP를 만들 당시 DARPA(미 국방부 고등연구원)에서 일한 경력이 있다.

 

 

미국 국방부가 관심을 갖던 것은 핵전쟁이 발발하더라도 정상적으로 작동하는 네트워크이다.

TCP이전 일반적으로 사용하던 통신방식은 회선교환(circuit switching)인데, 이는 특정 경로만을 설정해서 전달하는 방식인거다.

따라서 특정 경로가 폭격에 바갈나면 통신이 끊어진다.

 

이에따라 패킷교환방식을 사용하게 되었는데, 이는 데이터를 패킷단위로 나누어, 여러 경로들을 거쳐서 전달되게 된다.

다만 이는 네트워크환경의 안정성이 떨어진다는 단점이 있다. 왜냐하면 모든 패킷이 안전하게 도착한다는 보장이 없기 때문이다.

이에 따라 신뢰성을 보장하기 위한 TCP 방식이 탄생하게 되었다.

반응형
반응형

발단

docker에 대해 공부하다가, Yaml 파일 형식에 대해 처음 접하게 되었다.

그런데 문득 왜 yaml파일이라는 것이 생긴거지?라는 생각이 들었다.

 

전개

인터넷에 검색해봤는데, yaml파일을 만들게 된 이유에 대해서는 설명이 없었다.

그래서 yaml 공식문서에 있는 사람에게 메일을 보내 물어보기로 했다.

https://yaml.org/spec/1.0/#id2488873

 

YAML Ain't Markup Language (YAML) 1.0

YAML Ain't Markup Language (YAML™) 1.0 Final Draft 2004-JAN-29 Brian Ingerson Copyright © 2001-2004 Oren Ben-Kiki, Clark Evans, Brian Ingerson This document may be freely copied provided it is not modified. Status of this Document This is an intermediat

yaml.org

보낸 메일과 답장

결론

오렌은 친절하게 답변을 해줬는데, 답변내용은 아래와 같다.

2004년 당시 어떠한 프로그래밍 언어에서도 사용 가능한 data structure를 de/seriallizing 가능한 포맷을 찾고 있었다.

그런데 그때 당시 XML은 이것이 불가능햇고, 우리가 새로 만들게 되었다.

 

 

 

+ 궁금했던 것.

1. Yaml의 장단점은 무엇인가?

 

장점: 주석 사용가능, 한글을 그대로 사용해도됨

단점: 개행, 공백으로 블록 인식. 이에 따라 한줄로 작성 불가함.

(사실 이는 단점이라기보다는 특징에 가까운 것 같다.)

 

https://yaml.org/spec/1.2-old/spec.html#id2759572

공식문서에 따르면, JSON의 최우선 디자인 목표는 간단함과 보편성이고 이에 따라 가독성을 조금 포기하는 대신에 생성과 파싱이 용이하게끔 한것이다.

반면에 YAML의 최우선 설계 목표는 가독성과 데이터구조 serialization이다. 따라서 가독성이 매우좋지만, 생성하고파싱하는데 약간 더 시간이 걸린다.

 

2. Yaml을 restful api에서 데이터 전송형식으로 쓸 순 없을까?

일단 앞서 언급했듯이, json이 좀더 생성과 파싱에 용이하다.

그리고 yaml은 공백으로 구분하는데, 이것은 json파일보다 크게 만들고, json보다 복자하다.

그리고 브라우저들은 json을 natively 제공한다 

하지만 위와 같은 복잡한 구조 떄문에 configuration file로는 yaml이 적합하다.

https://www.quora.com/Why-isnt-YAML-used-instead-of-JSON-for-the-web-as-its-easier-to-read-for-both-humans-and-machines

https://www.quora.com/Will-YAML-replace-JSON

 

Will YAML replace JSON?

Answer: JSON is actually a subset of YAML 1.2. YAML supports more “features” than JSON (comments, sets, ordered maps, timestamps, user defined types etc.), so it might as well gain more traction in the future, but I don’t think it will replace JSON.

www.quora.com

https://stackoverflow.com/questions/1726802/what-is-the-difference-between-yaml-and-json

 

What is the difference between YAML and JSON?

What are the differences between YAML and JSON, specifically considering the following things? Performance (encode/decode time) Memory consumption Expression clarity Library availability, ease of ...

stackoverflow.com

 

반응형

+ Recent posts