[코드트리] 한 가지로 열리는 자물쇠 /완전탐색
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() 는 절댓값을 만들어주는 함수