From ef1ab887488b36872b17b452cfd3bde32d117e73 Mon Sep 17 00:00:00 2001 From: kdongsu5509 Date: Wed, 24 Jul 2024 11:56:30 +0000 Subject: [PATCH 1/8] Auto Update README.md file --- README.md | 12 ++++++------ total_push_cnt.txt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d6a0018..ce1b799 100644 --- a/README.md +++ b/README.md @@ -30,11 +30,11 @@ Python : 27    Java : 0    C : 0     C++ : 0     C# : 0 남현호 - 7 - 7 - 93 - -93000 - Python : 7    Java : 0    C : 0     C++ : 0     C# : 0 + 10 + 10 + 90 + -90000 + Python : 10    Java : 0    C : 0     C++ : 0     C# : 0 류정민 12 @@ -58,7 +58,7 @@ Python : 28    Java : 0    C : 0     C++ : 0     C# : 0
-총 Push 횟수 : 126회 +총 Push 횟수 : 127회 # 업로드 방법 ### 1. 파일명 diff --git a/total_push_cnt.txt b/total_push_cnt.txt index 0a3e7b0..c75acbe 100644 --- a/total_push_cnt.txt +++ b/total_push_cnt.txt @@ -1 +1 @@ -126 +127 From 9990226b3f19d9c8aedb58bad0296f38114e9915 Mon Sep 17 00:00:00 2001 From: l-suyeon-l Date: Fri, 26 Jul 2024 18:51:05 +0900 Subject: [PATCH 2/8] ADD : 30.py --- SYCHOI/21to30/30.py | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/SYCHOI/21to30/30.py b/SYCHOI/21to30/30.py index 360278e..f93c115 100644 --- a/SYCHOI/21to30/30.py +++ b/SYCHOI/21to30/30.py @@ -6,44 +6,45 @@ def isValid(ny, nx, n, m, maps) : # 방문할 좌표가 벽이 아니면 return def append_to_Queue(ny, nx, k, time, visited, q) : - if not visited[ny][nx][k] : - visited[ny][nx][k] = True - q.append((ny, nx, k, time + 1)) + if not visited[ny][nx][k] : # 방문하지 않았다면 + visited[ny][nx][k] = True # 방문 표시 + q.append((ny, nx, k, time + 1)) # time + 1 상태 q에 append def solution(maps) : n, m = len(maps), len(maps[0]) # n : maps의 행 개수, m : maps의 열 개수 visited = [[[False for _ in range(2)] for _ in range(m)] for _ in range(n)] # [False, False]를 m개의 열 개수만큼, n개의 행 개수만큼 생성 - # Flase for _ in range(2) : [False, False] 생성 - - # dy, dx의 인덱스에 따라 상/하/좌/우 구별 가능 + # False for _ in range(2) : [False, False] 생성 + + # dy, dx의 인덱스에 따라 상/하/좌/우 구별 가능 : dx[0] & dy[0] = 위로 이동 dy = [-1, 1, 0, 0]; dx = [0, 0, -1, 1] - q = deque() # q라는 변수에 덱 기능 선언 endY, endX = -1, -1 # 도착점의 x, y 좌표 넣는 변수. -1로 초기화한다 + q = deque() # q라는 변수에 덱 기능 선언 for i in range(n) : for j in range(m) : if maps[i][j] == "S" : - q.append((i, j, 0, 0)) # 덱 q에 시작점 좌표 입력 - visited[i][j][0] = True + q.append((i, j, 0, 0)) # 덱 q에 시작점 좌표 입력 (q의 오른쪽 끝에 삽입) + visited[i][j][0] = True # (i, j) 좌표 방문 표시 if maps[i][j] == "E" : - endY, endX = i, j + endY, endX = i, j # (i, j) 출구 좌표 입력 while q : - y, x, k, time = q.popleft() + y, x, k, time = q.popleft() # (q의 왼쪽 끝 원소 pop) + # y좌표 , x좌표, 레버 동작 여부, 시작 지점부터 해당 좌표까지 가는 데 걸린 시간 - if y== endY and x == endX and k == 1 : + if y== endY and x == endX and k == 1 : # 왜 k == 1이어야 할까..? return time - for i in range(4) : - ny, nx = y + dy[i], x + dx[i] + for i in range(4) : # 현재 좌표(y, x)에서 상하좌우 1칸씩 이동 + ny, nx = y + dy[i], x + dx[i] # 이동한 좌표 ny, nx에 저장 - if not isValid(ny, nx, n, m, maps) : - continue + if not isValid(ny, nx, n, m, maps) : + continue # 이동 불가한 위치라면 continue - if maps[ny][nx] == "L" : - append_to_Queue(ny, nx, 1, time, visited, q) + if maps[ny][nx] == "L" : + append_to_Queue(ny, nx, 1, time, visited, q) # 이동한 곳이 레버라면 k = 1 적용 else : - append_to_Queue(ny, nx, k, time, visited, q) + append_to_Queue(ny, nx, k, time, visited, q) # 이동한 곳이 레버가 아니라면 k = 0(그대로) return -1 @@ -51,4 +52,4 @@ def solution(maps) : #TEST 코드입니다. 주석을 풀어서 확인해보세요 print(solution(["SOOOL", "XXXXO", "OOOOO", "OXXXX", "OOOOE"])) -print(solution(["LOOXS", "OOOOX", "OOOOO", "OOOOO", "EOOOO"])) \ No newline at end of file +# print(solution(["LOOXS", "OOOOX", "OOOOO", "OOOOO", "EOOOO"])) \ No newline at end of file From 384d2ec5dbe32ce24f6b844d66d1a15b59591aff Mon Sep 17 00:00:00 2001 From: kdongsu5509 Date: Fri, 26 Jul 2024 09:51:23 +0000 Subject: [PATCH 3/8] Auto Update README.md file --- README.md | 2 +- total_push_cnt.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ce1b799..e545bed 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Python : 28    Java : 0    C : 0     C++ : 0     C# : 0
-총 Push 횟수 : 127회 +총 Push 횟수 : 128회 # 업로드 방법 ### 1. 파일명 diff --git a/total_push_cnt.txt b/total_push_cnt.txt index c75acbe..a949a93 100644 --- a/total_push_cnt.txt +++ b/total_push_cnt.txt @@ -1 +1 @@ -127 +128 From c68030f3c8a0107f18db952b478964a7d88d2b27 Mon Sep 17 00:00:00 2001 From: l-suyeon-l Date: Fri, 26 Jul 2024 18:58:43 +0900 Subject: [PATCH 4/8] UPDATE : 30.py --- SYCHOI/21to30/30.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SYCHOI/21to30/30.py b/SYCHOI/21to30/30.py index f93c115..9e155a8 100644 --- a/SYCHOI/21to30/30.py +++ b/SYCHOI/21to30/30.py @@ -52,4 +52,4 @@ def solution(maps) : #TEST 코드입니다. 주석을 풀어서 확인해보세요 print(solution(["SOOOL", "XXXXO", "OOOOO", "OXXXX", "OOOOE"])) -# print(solution(["LOOXS", "OOOOX", "OOOOO", "OOOOO", "EOOOO"])) \ No newline at end of file +print(solution(["LOOXS", "OOOOX", "OOOOO", "OOOOO", "EOOOO"])) \ No newline at end of file From 0a05f199a66bbf175f2f6e31ec2c7046a91a18e4 Mon Sep 17 00:00:00 2001 From: l-suyeon-l Date: Sat, 27 Jul 2024 23:17:32 +0900 Subject: [PATCH 5/8] ADD : 32.py --- SYCHOI/31to40/32.py | 88 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 SYCHOI/31to40/32.py diff --git a/SYCHOI/31to40/32.py b/SYCHOI/31to40/32.py new file mode 100644 index 0000000..0d65292 --- /dev/null +++ b/SYCHOI/31to40/32.py @@ -0,0 +1,88 @@ +from collections import deque + +class Node : + def __init__(self, info, num, left=None, right=None) : + self.info = info # 노드의 좌표 정보 + self.left = left # 노드의 왼쪽 자식 노드 + self.right = right # 노드의 오른쪽 자식 노드 + self.num = num # 노드의 번호 + + def has_left(self) : + return self.left is not None # 왼쪽 노드에 값이 있으면 리턴 + + def has_right(self) : + return self.right is not None # 오른쪽 노드에 값이 없으면 리턴 + + +def make_BT(nodeinfo) : + # 노드의 개수만큼 1부터 노드길이 + 1까지의 리스트 생성 + nodes = [i for i in range(1, len(nodeinfo) + 1)] + + # y좌표 내림차순 정렬, y좌표가 같을 때 x좌표 오름차순 정렬 (y축은 크고 x축은 작은 노드의 인덱스값 정렬) + # nodes의 원소는 1부터, nodesinfo의 원소는 0부터 시작하므로 nodeinfo의 1차원 리스트에 대해서 x - 1 적용 + nodes.sort(key = lambda x : (nodeinfo[x - 1][1], -nodeinfo[x - 1][0]), reverse=True) + root = None # 루트 노드 초기화(None으로) + + # root를 기준으로 순회해서 트리에 노드 추가 + for i in range(len(nodes)) : + if root is None : + root = Node(nodeinfo[nodes[0] - 1], nodes[0]) # 'root' 노드의 info = nodeinfo[nodes[0] - 1], num = nodes[0] + else : + parent = root + node = Node(nodeinfo[nodes[i] - 1], nodes[i]) # 자식 노드들의 info = nodeinfo[nodes[i] - 1], num = nodes[i] + + while True : + # info[0] : 해당 노드(node, parent)의 x좌표 + if node.info[0] < parent.info[0] : # parent의 x좌표가 node보다 크면 + if parent.has_left() : + parent = parent.left # parent의 왼쪽 노드에 값이 있으면 현재 parent를 parent의 왼쪽 노드로 + continue + parent.left = node # parent의 왼쪽 노드에 값이 없으면 node 삽입 + break + else : # node의 x좌표가 parent보다 크면 + if parent.has_right() : + parent = parent.right # parent의 오른쪽 노드에 값이 있으면 현재 parent를 parent의 오른쪽 노드로 + continue + parent.right = node # parent의 오른쪽 노드에 값이 없으면 node 삽입 + break + return root + + +def pre_order(root, answer) : # 생성한 이진트리의 root, 전위순회를 담을 answer 리스트(answer[0]) + stack = [root] # stack에 root 노드 삽입 + while stack : + node = stack.pop() # stack의 최상단 노드 방문 + if node is None : + continue # 부모 노드의 왼쪽or오른쪽 노드가 없을 경우 + answer[0].append(node.num) # 방문한 노드의 값 answer[0]에 append + stack.append(node.right) + stack.append(node.left) # stack은 LIFO이기 때문에 먼저 방문할 왼쪽 노드를 나중에 삽입 + + +def post_order(root, answer) : # 생성한 이진트리의 root, 후위순회를 담을 answer 리스트(answer[1]) + stack = [(root, False)] # stack에 root 노드 & 방문 여부 삽입 + while stack : + node, visited = stack.pop() # stack의 최상단 노드 방문 + if node is None : + continue # 부모 노드의 왼쪽or오른쪽 노드가 없을 경우 + if visited : + answer[1].append(node.num) # 방문 + else : + stack.append((node, True)) + stack.append((node.right, False)) + stack.append((node.left, False)) + + + + +def solution(nodeinfo) : + answer = [[], []] # 이진 트리의 각각 [전위 순회], [후위 순회] 결과를 담을 변수 + root = make_BT(nodeinfo) # 입력받은 노드의 좌표(nodeinfo)를 통해 이진 트리 생성 + pre_order(root, answer) + post_order(root, answer) + + return answer + + +#TEST 코드입니다. 주석을 풀어서 확인해보세요 +print(solution([[5, 3], [11, 5], [13, 3], [3, 5], [6, 1], [1, 3], [8, 6], [7, 2], [2, 2]])) \ No newline at end of file From 5244d5fa107f726bd0737e82172fce4bd61b391e Mon Sep 17 00:00:00 2001 From: kdongsu5509 Date: Sat, 27 Jul 2024 14:17:47 +0000 Subject: [PATCH 6/8] Auto Update README.md file --- README.md | 12 ++++++------ total_push_cnt.txt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e545bed..3376f98 100644 --- a/README.md +++ b/README.md @@ -51,14 +51,14 @@ Python : 5    Java : 0    C : 0     C++ : 0     C# : 0 최수연 - 26 - 28 - 74 - -74000 - Python : 28    Java : 0    C : 0     C++ : 0     C# : 0 + 27 + 29 + 73 + -73000 + Python : 29    Java : 0    C : 0     C++ : 0     C# : 0
-총 Push 횟수 : 128회 +총 Push 횟수 : 129회 # 업로드 방법 ### 1. 파일명 diff --git a/total_push_cnt.txt b/total_push_cnt.txt index a949a93..b0d7324 100644 --- a/total_push_cnt.txt +++ b/total_push_cnt.txt @@ -1 +1 @@ -128 +129 From 7bf3c7c35228462ea24ceae036142e8bc61b892d Mon Sep 17 00:00:00 2001 From: l-suyeon-l Date: Sun, 28 Jul 2024 00:02:09 +0900 Subject: [PATCH 7/8] ADD : 19.py --- SYCHOI/11to20/19.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 SYCHOI/11to20/19.py diff --git a/SYCHOI/11to20/19.py b/SYCHOI/11to20/19.py new file mode 100644 index 0000000..92731e8 --- /dev/null +++ b/SYCHOI/11to20/19.py @@ -0,0 +1,25 @@ +def polynomial_hash(str) : + p = 31 + m = 1000000007 + hash_value = 0 + + for char in str : + hash_value = (hash_value * p + ord(char)) % m # why??? + return hash_value + +def solution(string_list, query_list) : + # string_list에 있는 문자열들을 해싱해서 hash_list에 저장 + hash_list = [polynomial_hash(str) for str in string_list] + + result = [] + for query in query_list : + query_hash = polynomial_hash(query) # query_list에 있는 문자열(query)들을 해싱해서 query_hash에 저장 + if query_hash in hash_list : + result.append(True) # 해당 해싱값이 hash_list에 있으면 True 저장 + else : + result.append(False) # 해당 해싱값이 hash_list에 없으면 False 저장 + return result + + +#TEST 코드입니다. 주석을 풀어서 확인해보세요 +print(solution(["apple", "banana", "cherry"], ["banana", "kiwi", "melon", "apple"])) \ No newline at end of file From 4cd768808fb2f3321cb4c477988ebca02dd61f2f Mon Sep 17 00:00:00 2001 From: kdongsu5509 Date: Sat, 27 Jul 2024 15:02:25 +0000 Subject: [PATCH 8/8] Auto Update README.md file --- README.md | 12 ++++++------ total_push_cnt.txt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3376f98..109b5db 100644 --- a/README.md +++ b/README.md @@ -51,14 +51,14 @@ Python : 5    Java : 0    C : 0     C++ : 0     C# : 0 최수연 - 27 - 29 - 73 - -73000 - Python : 29    Java : 0    C : 0     C++ : 0     C# : 0 + 28 + 30 + 72 + -72000 + Python : 30    Java : 0    C : 0     C++ : 0     C# : 0
-총 Push 횟수 : 129회 +총 Push 횟수 : 130회 # 업로드 방법 ### 1. 파일명 diff --git a/total_push_cnt.txt b/total_push_cnt.txt index b0d7324..fd03ab2 100644 --- a/total_push_cnt.txt +++ b/total_push_cnt.txt @@ -1 +1 @@ -129 +130