코드트리 챌린지

[코드트리] 한 가지로 열리는 자물쇠 /완전탐색

우당탕탕코딩일기 2023. 10. 11. 20:31

 

 

https://www.codetree.ai/missions/5/problems/one-way-lock?&utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

한 가지로 열리는 자물쇠


1부터 N까지 숫자를 중복해서 뽑아 총 3자리를 만들어야 하는 자물쇠가 하나 주어집니다. 이 자물쇠는 특이해서 한 자리라도 주어지는 조합과 거리가 2 이내라면 열리게 됩니다.

예를 들어, N = 6이고 주어진 조합이 (1, 2, 3) 이라면, 이 자물쇠는 (5, 4, 6)일 때 두 번째 자리의 숫자 차이가 2 이내가 되므로 열리게 됩니다. 자물쇠 번호가 (1, 5, 6)인 경우에는 첫 번째 자리의 숫자 차이가 2 이내가 되므로 열리게 됩니다. 만약 자물쇠 번호가 (6, 6, 6) 이라면 숫자 차이가 2 이내인 위치가 없으므로 열리지 않습니다.

N과 조합이 주어졌을때 자물쇠가 열리게 되는 서로 다른 조합의 수를 구하는 프로그램을 작성해보세요. 단, (1, 2, 3)과 (3, 2, 1)은 다른 가짓수로 셉니다.

 

입력 형식

첫 번째 줄에는 N이 주어집니다.

두 번째 줄에는 조합에 해당하는 정보 a, b, c가 공백을 사이에 두고 주어집니다.

  • 1 ≤ N ≤ 100
  • 1 ≤ a, b, c ≤ N
  •  

출력 형식

첫 번째 줄에 가능한 서로 다른 조합의 수를 출력합니다.

 

입출력 예제

예제1

입력:

6
1 2 3

 

출력:

210

 

 

 

 

내가 짠 코드


n = int(input())

a, b, c = list(map(int, input().split()))
cnt = 0
for i in range(1, n+1):
    for j in range(1, n+1):
        for k in range(1, n+1):
            if abs(i-a)<=2 or abs(j-b)<=2 or abs(k-c)<=2:
                cnt += 1

print(cnt)

 

한 자리씩 완전 탐색하면 된다. 일단 수는 1부터 n까지 이므로 모든 세 자리 수를 (1, n+1) 의 레인지로 잡으면 된다.

 

그리고 조건 설정에서 각자리수가 입력한 a,b,c 와 각각 차이가 2이하면 되므로

abs(i-a)<=2 이거나 abs(j-b)<=2 이거나 abs(k-c)<=2 이면

카운팅한다.

 

abs() 는 절댓값을 만들어주는 함수

 

728x90