BOJ 1071번: 소트

2021. 4. 6. 04:17· 알고리즘💻/그리디

www.acmicpc.net/problem/1071

 

1071번: 소트

N개의 정수가 주어지면, 이것을 연속된 두 수가 연속된 값이 아니게 정렬(A[i] + 1 ≠ A[i+1])하는 프로그램을 작성하시오. 가능한 것이 여러 가지라면 사전순으로 가장 앞서는 것을 출력한다.

www.acmicpc.net

N개의 정수가 주어지면, 이것을 연속된 두 수가 연속된 값이 아니게 정렬(A[i] + 1 ≠ A[i+1])하는 프로그램을 작성하시오. 가능한 것이 여러 가지라면 사전순으로 가장 앞서는 것을 출력한다.

 

문제풀이:

연속된 두 수가 연속된 값일 경우 (A[i] + 1 == A[i+1]) A[i+1]과 그 이후에 나오는 수 중 A[i+1]이 아닌 수 A[index]를 찾는다. 그리고 찾은 A[index]가 A[i]와 같다면 ([1, 2, 2, 1])같은 경우.. swap(A[i], A[i+1]) 한다. 아닌 경우에는 swap(A[i+1], A[index])

그리고 이때 인덱스가 N을 넘어가도록 A[i+1]과 다른 수가 나오지 않으면 A[i]와 A[i+1]을 swap한다. 

 

[1,1,2,2]같은 경우에는 한 번 돌리는 걸로는 구할 수 없으므로 while문을 이용해서 한 번 함수를 돌리고 연속되는 수가 있는지 체크해서 연속되는 수가 없을 때까지 함수를 계속 돌린다..

 

import sys

N = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
num.sort()

def swap(num):
    global N

    for i in range(N-1):

        if (num[i]+1 == num[i+1]):
            index = i+2
            if (index > N-1):
                temp = num[i+1]
                num[i+1] = num[i]
                num[i] = temp
                #swap(num[i], num[i+1])
                continue
                
            while (num[i+1]==num[index]):
                index+=1
                if (index>N-1):
                    temp = num[i+1]
                    num[i+1] = num[i]
                    num[i] = temp
                    break
                    #swap(num[i], num[i+1])
            if (index<=N-1):
                if (num[index]==num[i]):
                    temp = num[i+1]
                    num[i+1] = num[i]
                    num[i] = temp
                    #swap(num[i], num[i+1])
                else:
                    temp = num[index]
                    num[index] = num[i+1]
                    num[i+1] = temp
                    #swap(num[i+1], num[index])
            
swap(num)
while (True):
    check = 0
    for i in range(N-1):

        if (num[i]+1 == num[i+1]):
            check = 1
            swap(num)
            break
    if (check==0):
        break

for i in num:
    print(i, end=" ")

 

ㅈ   ddfd dfsda

fd adfs fdfa 

어려웠고 오래걸렸는데ㅠㅠ 처음엔 그냥 연속되는 두  숫자를 swap 하기도 해보고, i+2번째 수와 i+1번째 수를 swap하기도 해봤는데 최적의 경우를 찾는 규칙을 찾는 게 어려웠다. 그래도 내 손으로 풀어서 뿌듯하다..

저작자표시 (새창열림)

'알고리즘💻 > 그리디' 카테고리의 다른 글

BOJ 13305번: 주유소  (0) 2021.08.03
BOJ 2437번: 저울  (0) 2021.07.19
BOJ 1758번: 알바생 강호  (0) 2021.04.06
BOJ 2828번: 사과 담기 게임  (0) 2021.04.06
BOJ 19639번: 배틀로얄  (0) 2021.01.16
'알고리즘💻/그리디' 카테고리의 다른 글
  • BOJ 13305번: 주유소
  • BOJ 2437번: 저울
  • BOJ 1758번: 알바생 강호
  • BOJ 2828번: 사과 담기 게임
호프
호프
Untitled호프 님의 블로그입니다.
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
BOJ 1071번: 소트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.