목록구현 (5)
꾸준하게 거북이처럼
20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 이런 유형의 문제는 시뮬레이션 + 구현 문제로, 한 좌표에서 여러개의 정보가 들어가는데, 보통 dictionary나 2차원 배열을 사용한다. 아래와 같이 dictionary를 써보니 코드가 생각보다 간략해졌다. 1. 조건 - m개의 파이어볼, 방향 8방향, 처음 끝 행과 처음 끝 열 연결되어있음. - d방향 s칸 이동, 명령 k번 - 2개이상 파이어볼이 있으면 같은 파이어볼 4개로 나누어짐.(모두 방향이 짝/홀수면 0,2,4..
17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 구현 시뮬레이션 문제로, 문제 조건을 잘 체크해야한다. - 0은 정렬 X, - 정렬 하는 기준 : 등장 횟수 > 숫자 가 커지는! 순 - 크기가 달라지면 큰 행또는열 기준으로 0을 채워야함 - 행이나 열 크기가 100 넘으면 100x100으로 자르기 이 문제는 아래처럼 파이썬의 zip연산을 이용해서 열 정렬을 쉽게 할 수 있다. a = [[1,2,3], [4,5,6]] a = list(zip(*a)) print(a) # [(1,4) ,(2,5), (3..
12933번: 오리 첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다. www.acmicpc.net 중요 포인트 1. 어떻게 종료 조건을 만들 것인지 + 한 번의 문자 검사 싸이클 이후에 어떤식으로 다음 싸이클을 넘길 것인지 => 여기서 나는 고민을 많이했다. while문으로 풀 생각을 하니 복잡해졌었다. 한 번 검사하는 싸이클을 돌고 나서 어떤 식으로 다음 싸이클로 넘어갈 것인가... for문으로 시작 하는 인덱스로 변수를 넘겨주는 방식을 선택했다. -> 하지만 종료조건은 언제가 되지? -> 모든 문자를 확인해서 좀 더 정확하고 쉬운 방법으로, 입력받은 문자열 하나씩 for문으로 받..
11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시 www.acmicpc.net 이전 글에서 소개한 문제와 비슷한 문제인데, 입력을 여러 줄에 걸쳐서 할때는 sys.stdin.readlines()를 사용한다. 하지만 전에 생각을 못한 궁금증이 하나 생겼는데, 이 문제는 아무리봐도 종료조건이 없다. 총 몇 줄을 입력하는지 모른다. 구글링을 하다보니 입력에서 더 이상의 읽을 수 있는 데이터가 존재하지 않을 때 종료된다는 의미였다. 맥에서는 Ctrl+D 입력을 통해서 EOF 가 입력되어 종료가 된다. 이와 같은 문제를 마추지면 당..

sys.stdin.readline() 백준 1193번은 시간제한 0.5초가 있다. 보통 이럴 때는 Input보다는 sys을 이용해서 위와 같이 입력을 받아주는게 좋은 것 같다. 그리고 for문 중복이나 반복문 중복을 피하기가 어려울 때, 불필요한 연산을 하지 않도록 만들어주어야 한다. 어찌보면 당연하지만, 1193과 같은 문제를 보면 n 번째 분수를 찾아야하는데 그 전 번째 분수까지 계산하는 과정을 최소로 줄여야 시간제한을 벗어날 수 있다. 처음에는 차근차근 문제를 푼다고 n번째 분수를 찾느라 그 전 번째 분수 계산과정까지 반복문에 넣다보니 시간 초과가 났다. 규칙을 잘 파악해서 딱 n번째 분수를 찾을 수 있도록 구상을 해야했다. import sys n = int(sys.stdin.readline()) ..