[백준] 30105 - 아즈버의 이빨 자국 (G5)

2023. 10. 31. 20:03·알고리즘 (PS)/BOJ
반응형

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

 

30105번: 아즈버의 이빨 자국

집안의 먹을 것들이 계속해서 사라지는 당신은 이웃집의 곰 아즈버(azber)를 의심하고 있다. 오늘, 당신은 드디어 결정적인 증거를 찾아냈는데, 그것은 바로 쵸코바에 찍힌 이빨 자국이었다! 당신

www.acmicpc.net

처음 문제를 읽었을 때는 감이 안왔는데, 시간 제한을 보고 브루트포스라는 감을 잡아 풀었다.

N의 사이즈가 4000개이므로, 임의 2개의 점 사이 모든 간격을 구하는데 1.6 * 10^7 의 연산이 필요하고, 이는 3초안에 충분히 가능한 연산이다.

 

나는 임의 두점 x1, x2 사이의 거리를 구하고, 해시맵에 그 거리를 key 로 하여 그 거리를 구성한 점들을 set으로 저장했다.

 

Map[distance] = {x1, x2}

 

이런 형태가 될 것이다.

이미 집합이 존재하는지 체크하기 위해 try - except 문으로 len(Map[distance]) 를 수행시키고, 에러가 발생하면 아직 distance 키가 존재하지 않으므로 해당 키에 set을 새로 생성하고나서 값을 추가해주었다.

 

맵에서 특정 키가 존재하는지 체크할 때, O(n) 시간으로 하나하나 도는 것보다 에러 처리로 푸는 경우가 더 많다.

(다른 더 좋은 방법이 있다면 알려주세요..)

 

이렇게 추가를 하고나서 집합의 사이즈를 측정했을 때, 모든 점이 다 들어있다면 이 distance는 가능한 distance 인 것으로 보고 체크해주면 끝이다.

 

n = int(input())
positions = [*map(int, input().split())]
check = dict()
ans = []
for i in range(n):
    for j in range(i+1, n):
        diff = positions[j] - positions[i]
        try:
            len(check[diff])
        except:
            check[diff] = set()
        finally:
            check[diff].add(positions[j])
            check[diff].add(positions[i])
            if len(check[diff]) == n:
                ans.append(diff)

print(len(ans))
print(*sorted(ans))

말로 길게 설명했지만, 코드만 읽어도 직관적으로 이해할 수 있을 것이라고 생각한다.

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 (PS) > BOJ' 카테고리의 다른 글

[백준] 2243 - 사탕상자 (P5)  (0) 2023.11.16
[백준] 27172 - 수 나누기 게임 (G5)  (0) 2023.11.06
[백준] 2629 - 양팔저울 (G3)  (0) 2023.10.28
[백준] 9370 - 미확인 도착지 (G2)  (0) 2023.10.02
[백준] 28458 - Mahjong Tenpai (P5)  (0) 2023.08.27
'알고리즘 (PS)/BOJ' 카테고리의 다른 글
  • [백준] 2243 - 사탕상자 (P5)
  • [백준] 27172 - 수 나누기 게임 (G5)
  • [백준] 2629 - 양팔저울 (G3)
  • [백준] 9370 - 미확인 도착지 (G2)
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[백준] 30105 - 아즈버의 이빨 자국 (G5)
상단으로

티스토리툴바