본문 바로가기

전체 글

(268)
[백준 14503번] 로봇 청소기 파이썬 풀이 문제https://www.acmicpc.net/problem/14503 풀이0은 빈칸, 1은 벽이므로 로봇이 청소한 칸은 2로 표시해야 후진할 때 구분할 수 있다.후진할 수 있는 경우는 방향을 유지한 채로 뒤가 청소한 칸이라면 후진할 수 있지만, 벽이라면 후진할 수 없고 작동을 멈춘다.주변 4칸 중 청소되지 않은 빈 칸이 있다면 무조건 가장 먼저 반시계 방향으로 회전 후 전진해야 한다.이 점이 헷갈려서 처음에 회전시키지 않고 전진시켜서 오류가 생겼다. 일단 가장 먼저, 주변 칸 중 0인 칸이 있는지 확인하는 check 함수부터 구현했다.다음으로, cleaning 함수를 구현하여 청소할 게 있다면 반시계 방향으로 돌아 x, y 값을 갱신 후, 다시 while 문을 돌며 청소한다.만약 청소할 게 없다면 후진..
[백준 14502번] 연구소 파이썬 풀이 문제https://www.acmicpc.net/problem/14502 풀이아직 bfs 에 익숙치 않고 이번에도 큐에 넣는걸 생각을 못했다...make_wall까지는 했는데 bfs 구현을 어떻게 해야할지 모르겠어서 구글링을 통해서 참고해서 풀었다. 코드from collections import dequeimport sysimport copyinput = sys.stdin.readlinen, m = map(int, input().split()) # 행, 열virus_map = [list(map(int, input().split())) for _ in range(n)]answer = 0dx= [1, -1, 0, 0]dy= [0, 0, -1, 1]def make_wall(wall_cnt): if wall..
[백준 2941번] 크로아티아 알파벳 파이썬 풀이 문제https://www.acmicpc.net/problem/2941 풀이replace 함수를 이용해서 간단하게 풀 수 있었다.변경된 크로아티아 알파벳들을 하나씩 검사하며 입력받은 문자열에 있으면 한 글자로 대체하고, 마지막에 len을 구해 쉽게 풀 수 있었다. 제출 코드n = input()croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']for i in croatia : n = n.replace(i, '1')print(len(n))
[백준 2563번] 색종이 파이썬 풀이 문제https://www.acmicpc.net/problem/2563 풀이처음에는 색종이의 시작값과 끝값을 계산하고, 겹치는 부분을 빼려고 생각했으나 문제를 다시 읽어보니 전체 크기가 100 이하라는 점을 발견했고, 더 편하게 색종이가 지나간 자리는 1로 바꾸고, 아닌 자리는 0으로 둬서 마지막에 1인 부분을 모두 더해 간단하게 구현할 수 있었다. 코드t=int(input())paper = [[0]*101 for _ in range(101)]for _ in range(t): x, y = map(int, input().split()) for i in range(x, x+10): for j in range(y, y+10): paper[i][j]=1answer = ..
[백준 1063번] 킹 파이썬 풀이 문제https://www.acmicpc.net/problem/1063 풀이저번에 이코테 교재에서 풀었던 왕실의 나이트와 비슷하지만 돌의 움직임도 고려해야했기 때문에 조금 더 어려운 문제였다.왕실의 나이트에서 했던대로 king과 stone의 위치를 숫자로 변환해 저장하고, king이 갈 수 있는 방향을 dx, dy로 나누어 저장했다.다음으로, for문을 돌면서 다음 움직이는 방향으로 k_tmp와 s_tmp를 구하고, 1부터 8 사이에 값이 있는지 확인한다.만약 k_tmp가 도착한 곳이 현재 돌의 위치와 같고, s_tmp가 1부터 8 사이에 값에 위치해있다면, king을 k_tmp로 옮기고, stone도 s_tmp로 옮긴다.k_tmp의 위치가 현재 돌 위치와 다르다면 그냥 king의 위치만 k_tmp로 바꿔..
[백준 1018번] 체스판 다시 칠하기 파이썬 풀이 문제https://www.acmicpc.net/problem/1018 풀이n과 m의 크기가 50 이하로 작기 때문에, 완전 탐색하는 방법으로 풀었다.8*8의 크기로 탐색하기 때문에 바깥 반복문의 범위는 n-8, m-8까지 설정했다.white, black 변수를 0으로 설정하고, 8*8 크기 내에서 인덱스의 합이 짝수일 때, 홀수일 때 나누어 white, black으로 수정하는 개수를 각각 세어주고, changes 리스트에 append한 뒤 모든 반복문을 돌고 나서 최소값을 출력해 문제를 풀 수 있었다. 제출 코드n, m = map(int, input().split())original = []changes = []for _ in range(n): original.append(input())for x ..
[이코테 12장] 구현 문제 기출문제 파이썬 풀이 7. 럭키 스트레이트문제https://www.acmicpc.net/problem/18406 풀이매우 쉬운 구현 문제였다.입력받은 문자열의 길이를 구하고 절반씩 더하여 sum_left, sum_right에 각각 저장하고, 값이 같으면 lucky, 다르면 ready를 출력하여 문제를 풀 수 있었다. 제출 코드n= input()length = len(n)sum_left, sum_right = 0, 0for i in range(length//2): sum_left += int(n[i]) sum_right += int(n[length-1-i])if sum_left == sum_right : print("LUCKY")else : print("READY")8. 문자열 재정렬문제알파벳 대문자와 숫..
[백준 1541번] 잃어버린 괄호 파이썬 풀이 문제https://www.acmicpc.net/problem/1541 풀이식의 값을 최소로 만들기 위해서는 빼는 값을 최대로 만들면 된다.그러므로 입력값에서 -을 기준으로 split하여 리스트에 저장하고, 리스트에 저장된 문자열들의 합을 구하고 각 값을 빼주면 문제를 풀 수 있다. 제출 코드n = list(input().split('-'))num = []for i in n: s = 0 tmp = i.split('+') for j in tmp: s += int(j) num.append(s)answer = num[0]for i in range(1, len(num)): answer -= num[i]print(answer)