Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바
- Spring
- 날씨API
- 코딩테스트
- 프로그래머스
- 성장형마인드셋
- 백준
- 배열탐색
- SQL
- 동전교환알고리즘
- openapi
- 향상된for문
- API명세서
- 스프링
- 참조변수타입변환
- 재귀적사고
- ChatGPT
- SQ3R
- 네이티브애플리케이션
- API
- 스레드동기화
- 4A피드백
- Java
- 99클럽
- 제너릭메서드
- 루트사용자
- staging_area
- 프로젝트
- 파일사용권한
- string메서드
Archives
- Today
- Total
개발 공부용
[백준] 18870 - 좌표 압축 본문
문제 출처 : https://www.acmicpc.net/problem/18870
문제
수직선 위의 n개의 좌표에 좌표 압축을 적용한다.Xi를 좌표 압축한 결과의 값은 Xi<Xj를 만족하는 서로 다른 Xj의 좌표의 개수와 같아야 한다.X1~Xn에 좌표 압축을 적용한 결과를 출력하라.
좌표 압축이란 주어진 숫자의 상대적 크기만 유지하면서 그 숫자들을 0부터 시작하는 연속된 정수로 변환하는 것을 말한다.
참고 자료: https://blog.naver.com/vh00nj0v/223587794515
입력
- 첫째 줄에 N이 주어짐.
- 둘째 줄에 공백 한 칸으로 구분된 X1,X2~Xn이 주어짐.
출력
- 첫째 줄에 좌표 압축을 적용한 결과를 공백 한 칸으로 구분하여 출력한다.
문제 풀이 방법
- N을 변수에 저장한다
- X1~Xn을 리스트에 입력 순서대로 저장한다.
- 리스트를 정렬하여 X1~Xn을 딕셔너리의 key로 넣는다.
- value는 0부터 순차적으로 1씩 증가시켜 넣는다.
- 입력받은 순서대로 좌표 압축한 값을 리스트에 넣고 출력한다.
작성한 코드
import sys
N = int(sys.stdin.readline().strip()) #1
coordinate = list(map(int,sys.stdin.readline().strip().split())) #2
coordinates = {}
num = 0
for coor in sorted(coordinate): #3
if coor not in coordinates.keys():
coordinates[coor] = num #4
num+=1
result = [coordinates[coor] for coor in coordinate] #5
print(' '.join(map(str,result)))
#print(*result)도 가능
좌표 압축이라는 개념이 잘 이해가 안되었으나 그것만 알면 잘 풀 수 있었던 문제같다.
출력할 때 print(' '.join(map(str,result)))를 print(*result)로 쓸 수도 있는데
코드 길이가 줄고 메모리 사용량도 줄었으나 시간이 더 오래 걸렸다.
알고 넘어가면 될 것 같다.
'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글
[백준] 31860 - 열심히 일하는 중 (0) | 2025.02.22 |
---|---|
[백준] 1524 - 세준세비 (0) | 2025.02.19 |
[백준] 20291 - 파일 정리 (0) | 2025.02.18 |
[백준] 28107 - 회전초밥 (0) | 2025.02.15 |
[백준] 14235 - 크리스마스 선물 (0) | 2025.02.13 |