Json 형식으로 된 string 을 가지고 각각의 클래스 / 멤버 형태로 파싱하여 출력하기DECLARE @array VARCHAR(MAX)
SET @array = '[{"month":"Jan", "temp":10},{"month":"Feb", "temp":12},{"month":"Mar", "temp":15},
{"month":"Apr", "temp":17},{"month":"May", "temp":23},{"month":"Jun", "temp":27}
]';
SELECT * FROM OPENJSON(@array)
WITH ( month VARCHAR(3),
temp int) A
@array 변수에 month / temp 로 구성된 리스트 저장후 출력시 OPENJSON() 함수 사용 하여 파싱 후 출력시 다음과 같이 결과 출력
특정 클래스의 요소에 접근 할 경우 OPENJSON(@json, $.aaa.bbb."cc") 로 사용 key / value 의 형태로 접근 할 때 key 에 대해 직접적으로 사용할 경우 keyword에 해당하는 단어 이므로 [key] 로 사용 해야 함 조건도 기존 테이블 조회와 동일하게 WHERE 로 걸 수 있음
# push X: 정수 X를 큐에 넣는 연산이다.
# pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
# size: 큐에 들어있는 정수의 개수를 출력한다.
# empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
# front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
# back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
def push(list, a) :
list.append(a)
return list
def pop (list) :
if not list:
print(-1)
else :
print(list[0])
del(list[0])
return list
def size(list) :
return len(list)
def empty(list) :
if not list:
return 1
else :
return 0
def front(list) :
if not list:
return -1
else :
return list[0]
def back(list) :
if not list:
return -1
else :
return list[-1]
i = int(input())
list = []
for _ in range(i) :
cmd = input()
cmd = cmd.split(' ')
if cmd[0] == 'pop':
pop(list)
elif cmd[0] == 'push':
push(list, int(cmd[1]))
elif cmd[0] == 'front':
print(front(list))
elif cmd[0] == 'back':
print(back(list))
elif cmd[0] == 'empty':
print(empty(list))
elif cmd[0] == 'size':
print(size(list))
-> 이 방식으로 제출하면 채점시 시간 초과 오류가 뜬다
# 시간초과를 해결하기 위한 방안
0. switch case 교체
파이썬에서는 지원되지 않는 구문이므로 포기
1. 함수 삭제
사실 해당 내용에서의 함수는 큰 의미가 없어, 없어도 크게 영향을 받지 않음
2. input 변경
sys.stdin import
# 변경후
from sys import stdin
list = []
for _ in range(int(stdin.readline())) :
cmd = stdin.readline().split()
if cmd[0] == 'pop':
if list : print(list.pop(0))
else : print (-1)
elif cmd[0] == 'push':
list.append(cmd[1])
elif cmd[0] == 'front':
if not list: print(-1)
else : print(list[0])
elif cmd[0] == 'back':
if not list: print(-1)
else : print(list[-1])
elif cmd[0] == 'empty':
if not list: print(1)
else : print(0)
elif cmd[0] == 'size':
print(len(list))
각 세 변의 입력 순서에 대한 조건이 없으므로, 세 변의 길이가 모두 가장 긴 변일때의 케이스를 고려 해야 함
while (1) :
a, b, c = map(int, input().split())
if a == b == c == 0 : break
if c ** 2 == (a**2 + b** 2) or b** 2 == (a**2 + c** 2) or a**2 == (c**2 + b**2): print("right")
else : print("wrong")
두 터렛 사이에서 감지 할 수 있는 적의 범위 중 두 터렛이 동시에 감지할 수 있는 적의 위치의 개수를 구함
-> 터렛이 감지할 수 있는 범위를 원으로 생각한다면 두 원이 동시에 감지 할 수 있는 적의 위치의 개수는 두 원의 교점이 된다
-> 두 원의 교점을 구하는 프로그램으로 단순화하여 생각할 수 있음
# 두 원의 교점에 대한 경우의 수
1) 무한대 : 두원이 동일
2) 1 : 내접, 외접
3) 2 : 두 원의 거리가 각 원의 반지름의 합 보다 작은 경우
4) 0 : 두 원의 거리가 각 원의 반지름의 합 보다 큰 경우 / 원의 중심이 같고 반지름의 크기가 다른 경우
# 코드
n = int(input())
for i in range(n) :
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = ((x1 - x2)**2 + (y1 - y2)**2)**(1/2)
if d == 0 and r1 == r2 :
print(-1)
elif d == (r1 + r2) or d == abs(r1-r2) :
print(1)
elif d > abs(r1-r2) and d < (r1 + r2) :
print(2)
else :
print(0)