정렬
페이지
미리보기
그래프 이론구현그래프 탐색시뮬레이션
자세히 보기
백준 3987번
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
stellar = []
for _ in range(n):
    stellar.append(list(input().rstrip()))
pr, pc = map(int, input().split())

dirDic = {'U':[0, -1], 'R':[1, 1], 'D':[0, 1], 'L':[1, -1]}     # 방향 이동 정보
slashDic = {'U':'R', 'D':'L', 'R':'U', 'L':'D'}                 # / 방향 전환
backDic = {'U':'L', 'D':'R', 'R':'D', 'L':'U'}                  # \\ 방향 전환

result = ['U', 0]
for i in dirDic:                            # 4가지 방향에 대해 거리 구하기 시작
    dist = 0                                # 초기 거리
    dir = i                                 # 초기 방향
    infinite = False                        # 무한 여부
    area = [n-1, m-1]                       # 공간 크기
    loc = [pr-1, pc-1]                      # 현재 위치
    while True:
        if stellar[loc[0]][loc[1]] == 'C':  # 블랙홀 만나면 바로 ㅂㅂ
            break
        elif stellar[loc[0]][loc[1]] == '/':      # 반향 전환
            dir = slashDic[dir]
        elif stellar[loc[0]][loc[1]] == '\\\\':
            dir = backDic[dir]

        dirInfo = dirDic[dir]               # 현재 방향의 이동 정보 가져오기
        loc[dirInfo[0]] += dirInfo[1]       # 현재 위치 변경
        dist += 1                           # 시간 증가

        if dist > (n * m * 2):              # 이거 보다 크면 갖힌거임 ㅅㄱ
            infinite = True
            break
        elif loc[dirInfo[0]] > area[dirInfo[0]] or loc[dirInfo[0]] < 0: # 계를 벗어나면 그만임
            break
    if infinite:                                # 무한대일 경우
        result = [i, 'Voyager']
        break                                   # 바로 종료
    elif result[1] < dist:                      # 아니면 거리가 큰 걸로 결과값 교체
        result = [i, dist]
print(*result, sep='\\n')                        # 결과 출력
브루트포스 알고리즘구현
자세히 보기
백준 2503번
import sys, itertools
input = sys.stdin.readline

all = list(itertools.permutations(range(1, 10), 3)) # 모든 경우의 수 다 확인할거임

for _ in range(int(input())):               # 질문 반복
    num, st, ba = map(int, input().split())
    num = list(map(int, str(num)))          # 숫자 한자리씩 리스트
    idx = 0                                 # pop 고려한 인덱스 조절용
    for i in range(len(all)):               # 모든 경우 돌면서
        i -= idx
        s = 0
        b = 0
        for j in range(3):
            if all[i][j] == num[j]:         # 같은 자리면
                s += 1                      # 스트라이크 카운트
            elif num[j] in all[i]:          # 다른 자리면
                b += 1                      # 볼 카운트
        if s != st or b != ba:              # 둘 중 하나라고 질문이랑 다르면
            all.pop(i)                      # 과감하게 빼버림
            idx += 1                        # 뺐으니 인덱스 조절

print(len(all))                             # 남은 놈은 답일 가능성 있는 놈들임