-
[백준] 2659 - 십자카드 문제알고리즘 2023. 5. 24. 15:51728x90
1. 문제
https://www.acmicpc.net/problem/2659
2659번: 십자카드 문제
입력은 한 줄로 이루어지며, 이 한 줄은 카드의 네 모서리에 씌여있는 1 이상 9 이하의 숫자 4개가 시계 방향으로 입력된다. 각 숫자 사이에는 빈칸이 하나 있다.
www.acmicpc.net
2. 접근
1. 10000개의 True 박스를 만들고 1111 ~ 9999외의 모든 부분은 False로 지정한다
2. 조건에 따라 0이 있으면 안되니까 0이 있는 부분도 False 처리
3. 내가 해맨 부분은 여기다 -> 나는 4개의 수가 지정되면 permutation을 써서 나올 수 있는 모든 부분을 체크하는 줄 알았는데, 결론은 4개의 수를 시계방향으로 돌리면서 읽을때 나올 수 있는 4개의 수 중에서만 시계값을 찾으면 된다
3-1. 시계 값을 제외하고 나머지는 전부 False 처리해준다
4. 1111부터 현재 시계값까지 오면서 True의 개수를 세어주면 된다
3. 풀이
# 2659 실버3 import sys input = sys.stdin.readline data = [True] * 10000 # 0 ~ 9999 for i in range(10000): # 0 ~ 9999 if len(str(i)) < 4: data[i] = False if '0' in str(i): data[i] = False n = list(map(str,input().split())) num = int(''.join(n)) minValue = 9999 for _ in range(4): num = (num%1000) * 10 + num//1000 if num < minValue: minValue = num for i in range(1111,minValue+1): d = [] tmp = i for _ in range(4): tmp = (tmp%1000) * 10 + tmp//1000 d.append(tmp) for j in d: if j != min(d): data[j] = False res = 0 for i in range(1111,minValue+1): if data[i] == True: res += 1 print(res)
'알고리즘' 카테고리의 다른 글
[프로그래머스] 가장 큰 정사각형 찾기 (0) 2023.06.26 [백준] 1337 - 올바른 배열 (0) 2023.05.27 [백준] 2567 - 색종이 2 (0) 2023.05.24 [백준] 1235 - 학생 번호 (0) 2023.05.17 [백준] 2002 - 추월 (0) 2023.05.17