알고리즘(8)
-
오목
문제 설명문제는 굉장히 이해하기 쉽다. 기존의 오목과 유사한 문제이다. 하지만 코드로 작성하는 과정에서는 굉장히 까다로울 수 있다 위치 한 곳을 바탕으로 가로, 오른쪽 대각선, 세로, 왼쪽 대각선을 비교하면서 흰색이나 검은색의 승리라고 판단되면 오목 가운데 위치와 흰색, 검은색 누가 이겼는지 출력해주면 된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static int[][] okmok; static int cnt; public static void main(String[] args) throws IOE..
2025.02.03 -
알고리즘 시간복잡도
알고리즘 및 코딩테스트를 준비하기 위해서는 시간복잡도는 굉장히 중요하고 신경을 써야 한다.문제를 풀다 보면 시간 초과를 겪는 현상이 있을 것입니다. 문제의 답은 맞지만, 효율적인 풀이가 아니라 큰 수의 데이터가 입력될 경우 효율적으로 풀어나갈 수 없는 것을 의미합니다. 어떻게 해야 풀어나갈 수 있을지 확인하려고 합니다.빅오 표기법은 매우 큰 데이터를 입력한다고 가정하고, 최악의 상황을 고려해야 한다. 최적의 상황이 있을 수 있지만, 실제 큰 데이터와 입력을 받는다고 가정하고 시간 복잡도를 고려해야 큰 데이터도 돌아갈 수 있다. 우선 그래프는 알고리즘 시간 복잡도에서 사용되는 사진입니다. 빅오 표기법의 예시 1.O(1) - 상수 시간: 입력 데이터의 크기에 관계 없이 알고리즘의 실행 시간이 일정한다. ..
2024.08.09 -
백준 - 구현 문제
-1219. 시간초과 import sysinput = sys.stdin.readlinen = str(int(input()))[::-1]n1 = len(n)tal = 0for i in range(n1): tal += int(n[i]) *(8**i)binary = ""while tal >= 1: binary+=str(tal % 2) tal = tal//2print(binary[::-1])- 실제로 구현을 했지만 시간초과 실패import sysinput = sys.stdin.readlineprint(bin(int(input(),8))[2:])-bin()함수를 적용하면 원하는 2진수 값을 얻을 수 있음 -백준 2729import sysinput = sys.stdin.readlinen = int(..
2024.05.07 -
DP(동적 프로그래밍)
-가장 큰 정 사각형 찾기def solution(board): n = len(board) m = len(board[0]) max_square = 0 cnt = 0 for i in range(n): for j in range(m): if board[i][j] == 1: cnt+=1 if cnt == 1: return 1 # 1이 한개 있으면 최댓 값 1 #1이 여러개 있을 시 for i in range(1, n): for j in range(1, m): if board[i][j] == 1: board[i][j] = min(bo..
2024.04.15 -
백준[2667] 단지번호붙이기
from collections import deque import sys sys.setrecursionlimit(10 ** 6) n = int(input()) def dfs(x,y): global cnt cnt+=1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
2024.02.06 -
백준[2606] 바이러스
from collections import deque import sys sys.setrecursionlimit(10 ** 6) input = sys.stdin.readline n = int(input()) m = int(input()) graph = [[]*(n+1) for _ in range(n+1)] visited = [False] *(n+1) cnt = 0 def dfs(i): global cnt cnt+=1 visited[i] = True for j in graph[i]: if visited[j] == False: visited[j] = True dfs(j) return cnt for _ in range(m): a,b = map(int,input().split()) graph[a].append(..
2024.02.06