반응형

 

1. 문제
    캥거루 위치 바꾸기 문제 (링크 참고)

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

 

11034번: 캥거루 세마리2

여러개의 테스트 케이스로 이루어져 있으며, 세 캥거루의 초기 위치 A, B, C가 주어진다. (0 < A < B < C < 100)

www.acmicpc.net

 

2. 문제 포인트

  • 캥거루는 3마리의 위치를 입력 받는다
  • 캥거루가 뛰는 위치는 다른 캥거루 2마리 사이다
    • 사이 좌표는 무관하다 (문제 조건에서 최대 가능 횟수를 묻기 때문에 최적의 위치로 생각한다)
  • 최대 캥거루의 점프 횟수를 출력한다

 

3. 접근법

  • 캥거루의 점프 횟수 규칙 찾기

  • 첫번째 Case
    • '캥1'과 '캥2' 사이에는 공간이 없기에 이동이 불가능
    • '캥2'와 '캥3' 사이에 공간이 한개이기에 한번만 이동 가능
  • 두번째 Case
    • '캥1'과 '캥2' 사이에 공간이 존재 (1칸)
      '캥1'과 '캥2' 사이에 '캥3'이 오게 되면 이동 횟수 1회로 종료
    • '캥2'와 '캥3 사이에 공간(2칸)으로 '캥1'이 이동
      위의 이미지와 같이 '캥1'이 최적의 위치로 이동하게되면 총 이동 가능 횟수 2회로 종료
    • 결과적으로 "최대 이동 가능 횟수 = max((캥1 위치 - 캥2 위치), (캥2 위치 - 캥3 위치)) - 1"

 

 

반응형

 

 

4. 결과 코드

import sys

while True:
	
    # 캥거루 위치값 입력 받기
    a = list(map(int, sys.stdin.readline().split()))
    
    # While을 이용해 입력이 더이상 없으면 종료
    if len(a) < 1:
        break
    
    # 1,2번 캥거루의 간격 차이와 2,3번 캥거루 간격 차이중 max값
    result = max(a[1] - a[0], a[2] - a[1])
    
    # 차이에서 -1한 값을 출력
    print(result - 1)
반응형
반응형

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