2023. 7. 11. 11:04ㆍ백준 & 프로그래머스
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/181187#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 및 코드
기본적으로 가능한 r,c들을 돌면서, 해당 좌표가 두 원 사이에 있는 지 확인하는 방식은 시간초과가 발생한다. 구간을 나누어서 계산해도 마찬가지였다. 해당 문제는 r 에 따른 최대 c를 구하는 방법을 사용해서 계산해야한다. 즉 특정 r에 대해 r1, r2 거리를 가지기 위한 c를 구하고, 'r2에 대한 c - r1에 대한 c' 방법을 활용해야 한다. 피타고라스를 통해 계산할 수 있으며 해당 값을 정수로 변환하여 계산해야 한다.
처음 필자가 짠 코드는 다음과 같다. 밑에 이쁘게 정리된 코드가 있으니 굳이 살펴보지 않아도 될 것이다.
해당 알고리즘과 같지만 추천수가 많은 코드도 가져왔다.
코드 짜는 게 미숙하는 생각이 든다.
먼저 r1이상일 경우에 대해 조건문을 추가하는 것이 아니라 for문을 나누어서 한다면 더 효율적일 것이다.
또한 r1의 최대 c가 정수일 경우 -1을 계산해주었는 데 루트전에 -1을 계산해준다면, 정수로 나왔을 때 발생하는 문제를 해결할 수 있다.
정답자 알고리즘에서 r1, r2의 제곱 부분을 미리 세팅을 해놓는다면 더 빠른 코드를 작성할 수 있을 것이라고 생각했다. 따라서 다음과 같은 코드로 정리했다.
'백준 & 프로그래머스' 카테고리의 다른 글
[프로그래머스] 연속된 부분 수열의 합 - python (0) | 2023.07.11 |
---|---|
[프로그래머스] 아방가르드 타일링 -python (0) | 2023.07.11 |
[프로그래머스] 요격 시스템 - python (0) | 2023.07.10 |
[프로그래머스] 주차 요금 계산 - python (0) | 2023.06.28 |
[프로그래머스] 양궁대회 - python (0) | 2023.06.28 |