본문 바로가기

파이썬47

[BOJ] 1018번 체스판 다시 칠하기 [BOJ] 1018번 체스판 다시 칠하기 문제 처음 보면 엄청 당혹스러운 브루트 포스 문제다. 먼저, 브루트 포스(Brute force)는 말 그대로 무차별 대입을 뜻하며, 어떠한 규칙을 구하는 것이 아닌 모든 경우의 수를 따지는 방법이다. 모든 경우의 수를 따지다 보니 $ N $이 적당히 작아야 하며, 실행 시간도 $ N $에 맞게 커야 한다. 이 문제의 경우엔 2초로 설정되어 있다. 만약 $ N $이 크거나 시간이 짧다면 브루트 포스를 하면 안 되고, 그리디 알고리즘이나 특정 알고리즘을 사용해야 한다. $ N $이 적당히 작아 보이고, 그에 맞거나 약간 긴 시간 제한이 주어지며, 바로 떠오르는 알고리즘이 없다면 주로 브루트 포스를 사용하게 된다. 모두 다 대입하는게 컴퓨터를 배우는 입장에서 덜 떨어져.. 2022. 9. 5.
[BOJ] 2447번 별 찍기 - 10 [BOJ] 2447번 별 찍기 - 10 문제 매우 어려운 재귀 문제다. 뉴비 절단기 삼대장 중 하나답게 매우 어렵다. 재귀의 핵심은 반복되는 부분을 코드로 압축시키는 것이다. 먼저 이 문제에서는 어떻게 반복되는지를 살펴보자. 먼저 $ 1 \leq k < 8 $이지만 $ k = 0 $의 경우도 있다고 치자. 그렇다면 $ k = {0, 1, 2} $일 때의 패턴은 아래와 같다. # k == 0 * # k == 1 *** * * *** # k == 2 ********* * ** ** * ********* *** *** * * * * *** *** ********* * ** ** * ********* 패턴이 보이는가? $ k \geq 1 $부터 $ k $번째 패턴에서의 첫 $ 3^{k-1} $줄에는 $ k-1 .. 2022. 8. 31.
[IDE 설치] Sublime Text 설치하기 Sublime Text는 파이썬 프로그램을 쉽고 가볍게 돌릴 수 있는 좋은 IDE 중에 하나다. 이는 PS를 할 때 굉장히 강력한 장점이 된다. 본인은 이 Sublime Text와 PyCharm을 동시에 사용하고 있으며, 각각 사용 용도에 따라 사용하고 있다. Sublime Text의 장단점 장점은 아래와 같다. 로컬에서 매우 가볍게 쓰기 좋다. 급하게 돌려야 할 파일이 있다면 이걸 사용하면 된다. 켜는데 오래 걸리지 않고 리소스도 덜 잡아먹는다. 위의 장점으로 인해 PS를 할 때 쓰기 매우 좋은 IDE라고 생각한다. 단점은 아래와 같다. 초기 설정을 조금 해줘야한다. 파이썬을 설치할 때 설정도 조금 만져줘야 하고, 단순 Sublime Text로는 키보드 입력을 못받아서 추가적으로 작업을 더 해줘야 한다.. 2022. 8. 24.
[BOJ] 10871번 X보다 작은 수 [BOJ] 10871번 X보다 작은 수 문제 X보다 작은 수를 수열 순서대로 출력하면 되는 문제다. import sys if __name__ == '__main__': N, X = map(int, sys.stdin.readline().rstrip().split()) A = list(map(int, sys.stdin.readline().rstrip().split())) for num in A: if num < X: print(num, end=' ') for문의 iterable 객체의 특성을 사용하면 쉽게 풀 수 있다. 2022. 8. 10.
[BOJ] 10952번 A+B - 5 [BOJ] 10952번 A+B - 5 문제 반복문과 조건문을 적절히 잘 써야 하는 문제다. import sys if __name__ == '__main__': while True: A, B = map(int, sys.stdin.readline().rstrip().split()) if A == 0 and B == 0: break print(A + B) A와 B가 각각 0과 0일 때에 무한 루프를 풀면 된다. 2022. 8. 10.
[파이썬 알고리즘 #5] 반복문 반복문에 대해서 알아보고자 한다. 반복문은 무엇인가? 말 그대로 반복을 하게 해 준다. 기계가 가장 잘하는 반복은 이 반복문에서 온다 봐도 무방하다. 간단하게 0부터 N까지 돌려주는 경우도 있고, list 안의 요소들을 불러올 수도 있다. 아니면 조건을 달아서 그 조건이 충족되지 않을 때까지 반복하는 경우도 있다. 앞의 경우가 for문, 뒤의 경우가 while문이다. 이 둘은 비슷하지만 의미의 차이가 약간 존재한다. 반복문 1 : for문 for문의 핵심은 모든 요소를 돌린다는 것에 있다. 예를 들어 아래의 경우를 살펴보자. for i in range(5): # for i in range(0, 5, 1): print(i) # Result 0 1 2 3 4 이 코드는 for문의 아주 핵심적이며 기초적인 r.. 2022. 8. 10.
[BOJ] 17114번 하이퍼 토마토 [BOJ] 17114번 하이퍼 토마토 문제 매우 흔한 BFS 문제이다. 대신 11차원일 뿐이다... 2차원 토마토와 3차원 토마토 문제는 아래에 적어둔다. [BOJ] 7576번 토마토 문제 (2차원) [BOJ] 7569번 토마토 문제 (3차원) 핵심은 위의 두 문제와 별반 다르지 않다. 입력을 받고, 1인 곳의 좌표를 저장하고, 그 좌표에서 계속 BFS를 돌려서 값을 갱신하고, 다시 모든 좌표를 돌아 0이 나오면 -1을 출력 후 종료하고 아니라면 모든 좌표값 중 최댓값을 구하는 것이다. 위의 2차원과 3차원과의 차이가 있다면, 이 문제는 무려 11차원이다. 입력 받는 것부터가 장난이 아니다. 다만 차원만 높을 뿐이지 푸는 데에는 큰 차이가 없어서 복잡한 입력 처리 연습으로 매우 괜찮은 것 같다. impo.. 2022. 8. 10.
[BOJ] 14681번 사분면 고르기 [BOJ] 14681번 사분면 고르기 문제 if - else문을 연습할 수 있는 좋은 문제이면서 매우 쉬운 문제다. import sys if __name__ == '__main__': x = int(sys.stdin.readline().rstrip()) y = int(sys.stdin.readline().rstrip()) if x > 0: print(1 if y > 0 else 4) else: print(2 if y > 0 else 3) print문 안에 if - else문을 넣을 수 있는 파이썬의 미친 성능을 체감할 수 있다. 2022. 8. 4.
[BOJ] 1330번 두 수 비교하기 [BOJ] 1330번 두 수 비교하기 문제 간단한 조건문 문제다. import sys if __name__ == '__main__': a, b = map(int, sys.stdin.readline().rstrip().split()) if a > b: print('>') elif a < b: print(' 2022. 8. 4.
[파이썬 알고리즘 #4] 조건문 이번엔 조건문에 대해서 다뤄보고자 한다. PS에 도움 되는 스킬도 적어보고자 한다. 조건문은 무엇인가? 간단히 말해, 특정 조건을 만족할 때에 추가로 실행하고 싶은 것을 돌리게 하는 일종의 트리거 장치다. 조건 $ A $의 경우엔 실행문 $ a $의 절차를 밟아야 하고, 조건 $ B $의 경우엔 실행문 $ b $로 돌려야 할 때 쓰인다. 이때 필요한 구문은 if - else문이다. 조건문이 참이냐 거짓이냐에 따라서 로직을 나누게 해 준다. 예시 : [BOJ] 1330번 두 수 비교하기 [BOJ] 1330번 두 수 비교하기 문제 - [풀이] 이 문제가 매우 정석적인 if - else문을 쓰는 문제다. a와 b 크기를 구분하는 아주 쉬운 문제다. if a > b: print('>') elif a < b: p.. 2022. 8. 4.
728x90