코테 부시는중..
내일도 화이팅!
코딩테스트 - 겹치는 선분의 길이
https://school.programmers.co.kr/learn/courses/30/lessons/120876
- 처음에 했던 코드
# 첫번째 시도 코드
def solution(lines):
answer = 0
x, y, z = lines
arr = []
arr1 = []
arr2 = []
arr3 = []
for a in range(x[0], x[1]+1):
arr += [a]
for a in range(y[0], y[1]+1):
arr += [a]
for a in range(z[0], z[1]+1):
arr += [a]
for a in arr:
if a not in arr1:
arr1 += [a]
else:
arr2 += [a]
answer += 1
for a in arr2:
if a not in arr3:
arr3 += [a]
else:
answer -= 1
if x[1] == y[0]:
answer -= 1
if y[1] == z[0]:
answer -= 1
if answer > 1:
answer -= 1
return answer
처음에 생각 했던것은 lines가 3개의 리스트로 이루어져 있으니 각 변수 x, y, z에 담아주고, 각 변수사이의 있는 값들을 모두 더해준다음 겹치는 부분을 찾아서 그 수만큼 더해주면 되지 않을까 했음.
일단 두개를 잘못 생각했는데,
1 ) pop()안에는 안넣거나 인덱스를 넣어야하는데 그냥 변수명을 넣어버렸음.
2) 문제에선 점이 아니라 선이 겹치는 부분을 찾는것인데 점이 겹치는것을 생각해버렸음.
- 정답 코드
# 정답코드(14점)
def solution(lines):
answer = 0
arr = []
x, y, z = lines
for a in lines:
arr += a
nmax = max(arr)
nmin = min(arr)
print(x, y, z, nmin, nmax)
print(arr)
for i in range(nmin, nmax+1):
count = 0
if x[0] <= i < x[1]:
count += 1
if y[0] <= i < y[1]:
count += 1
if z[0] <= i < z[1]:
count += 1
if count >= 2:
answer += 1
return answer
첫번째 시도 코드에서의 문제점들을 고치기 위해 max와 min함수를 사용했다. 그래서 lines의 값들중 가장 큰값과 가장 값은 값을 구해서 for문을 돌렸고, 각 변수 x, y, z값들안에 i가 있을경우 count 를 1 증가 시켜주었다. 여기서 중요한것은 연산식인데 각변수는 0번째 인덱스의 숫자는 포함하되 1번째 인덱스의 숫자는 포함하면 안된다. (중복 방지를 위해) 또한 선분의 겹치는 것을 알기위함이기 때문에 count 2개 이상일때문 answer 값이 오르게 하였다.
'내일 배움 캠프 > TIL' 카테고리의 다른 글
TIL) 11주차 1일 (0) | 2023.05.23 |
---|---|
TIL) 10주차 5일 (0) | 2023.05.19 |
TIL)10주차 3일 (0) | 2023.05.18 |
TIL) 10주차 2일 (0) | 2023.05.17 |
TIL) 10주차 1일 (0) | 2023.05.15 |