문제 · 알고리즘 쉬움 Python ·
Valid Sudoku
A partially filled 9×9 Sudoku board is given as 9 strings of 9 characters, each a digit 1–9 or "." for an empty cell. Return True if no row, no column and no 3×3 box contains the same digit twice. The board doesn't have to be solvable.
함수 시그니처
def valid_sudoku(board: list[str]) -> bool:예제
valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79']) # -> True
valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79']) # -> False제한 시간이 적용되는 6 개의 비공개 테스트와 0 개의 대규모 입력 테스트가 추가로 진행되며, 입력값은 공개되지 않습니다. 문제는 모델에 영어로 주어집니다.
1위DeepSeek V4 Pro 0423해결 · 테스트 8/8 통과응답 소요 5.7 초 · 실행 시간 6 ms · $0.0006 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 False <1 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ 2 ms코드
def valid_sudoku(board: list[str]) -> bool: # Check rows for row in board: seen = 0 for ch in row: if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask # Check columns for c in range(9): seen = 0 for r in range(9): ch = board[r][c] if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask # Check 3x3 boxes for box_r in range(0, 9, 3): for box_c in range(0, 9, 3): seen = 0 for r in range(box_r, box_r + 3): for c in range(box_c, box_c + 3): ch = board[r][c] if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask return True1위OpenAI GPT-6 Luna해결 · 테스트 8/8 통과응답 소요 1.8 초 · 실행 시간 8 ms · $0.0001 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 False <1 ms ✓ 1 ms✓ 2 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms코드
def valid_sudoku(board: list[str]) -> bool: rows = [0] * 9 cols = [0] * 9 boxes = [0] * 9 for r, line in enumerate(board): for c, ch in enumerate(line): if ch == ".": continue bit = 1 << (ord(ch) - ord("1")) box = (r // 3) * 3 + c // 3 if rows[r] & bit or cols[c] & bit or boxes[box] & bit: return False rows[r] |= bit cols[c] |= bit boxes[box] |= bit return True1위MiniMax M3.1 Flash해결 · 테스트 8/8 통과응답 소요 805 ms · 실행 시간 8 ms · $0.0001 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 False <1 ms ✓ 2 ms✓ 1 ms✓ 1 ms✓ <1 ms✓ <1 ms✓ <1 ms코드
def valid_sudoku(board: list[str]) -> bool: rows = [0] * 9 cols = [0] * 9 boxes = [0] * 9 for r, row in enumerate(board): for c, ch in enumerate(row): if ch == ".": continue bit = 1 << (ord(ch) - ord("1")) b = (r // 3) * 3 + c // 3 if (rows[r] | cols[c] | boxes[b]) & bit: return False rows[r] |= bit cols[c] |= bit boxes[b] |= bit return True1위Anthropic Claude Opus 5.5해결 · 테스트 8/8 통과응답 소요 2.7 초 · 실행 시간 8 ms · $0.0056 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])기댓값 False 2 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ 2 ms✓ <1 ms코드
def valid_sudoku(board: list[str]) -> bool: seen = set() add = seen.add for i in range(9): row = board[i] bi = (i // 3) * 3 for j in range(9): c = row[j] if c == '.': continue r = (0, i, c) k = (1, j, c) b = (2, bi + j // 3, c) if r in seen or k in seen or b in seen: return False add(r) add(k) add(b) return True
토큰 비용: $0.0065 · 진행 방식 및 점수 산정 안내 →