반응형

1. 문제

    문어 다리 엮기 문제 (링크 참고)

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

 

21313번: 문어

문어에게 여덟개의 팔이 있다는 사실은 잘 알려져 있다. 하지만 문어들이 자신의 팔들을 1번, 2번, 3번, ..., 8번이라고 부른다는 말은 오늘 처음 들었을 것이다! 단, 시계방향으로 오름차순이라던

www.acmicpc.net

 

2. 문제 포인트

  • 문어의 수(N)는 N(4 ≤ N ≤ 1,000)이다
  • 문어 다리의 번호는 중복이 없다
    • = 같은 숫자가 두번 이상 나오면 안된다
  • 사전상 가장 앞에오는 수열을 찾는다
    • = 최대한 1과 2를 사용해야 한다

 

 

반응형

 

 

3. 접근법

  • 문어 다리를 엮는 패턴 인식하기

  • 문어의 숫자가 짝수인 경우 (N % 2 == 0)
    • 1과 2가 문어의 숫자만큼 반복되면 첫번째 숫자를 찾을 수 있음
  • 문어의 숫자가 홀수인 경우 (N % 2 == 1)
    • 1과 2가 반복하되 마지막 문어는 3번 다리로 1번 문어와 손을 잡아야 한다
    • 사전상 가장 앞 수열은 1과 2를 이용해야 하나 위의 그림에서 5번 문어는 1번과 1번손을 잡을 수 없고(1번문어의 1번손은 2번과 잡음) 2번 손은 4번 문어가 3번과 이미 잡았기에 사용 할 수 없다. 따라서 5번 문어는 3번을 사용해야 한다

4. 결과 코드

import sys

# 문어 수 입력 받기
n = int(sys.stdin.readline().strip())

if n % 2 == 0:  #문어가 짝수인 경우
    # 문어 숫자 만큼 1과 2 반복
    result = [1, 2] * (n//2)
        print(*result)
    
else:  #문어가 홀수인 경우
	# n - 1번째까지 1,2반복
    result = [1,2] * (n//2)
    
    # 마지막 n번째에 3을 추가
    result.append(3)
    print(*result)

print(a)

 

반응형

+ Recent posts