알고리즘 384

[백준, 파이썬, 1138번] 한 줄로 서기

풀이 해당 알고리즘에 대해 어떻게 접근해야할지에 대한 고민을 오래했지만 잘 떠오르지 않아서 다른 분들의 풀이를 확인 후 조금씩 이해할 수 있었다. 우선 가장 문제였던 부분이 아래와 같다. 나의 키보다 큰 사람이 왼쪽에 입력 받은 수 만큼 있어야 하는 것. 입력 받은 수가 같을 경우. 그래서 다른 분들의 풀이를 참고하여 이해할 수 있었지만 해당 유형과 비슷한 문제들을 좀 더 풀어봐야 확실한 이해를 할 수 있을것 같다. 우선 위 문제였던 부분에 대한 해결법으로는 조건식을 통해 cnt와 입력 받은 값이 같은지 그리고 result[j]의 값이 아직 채워지지 않았는지 확인. import sys input = sys.stdin.readline n = int(input()) li = list(map(int,input..

알고리즘 2023.12.26

[백준, 자바, 1063번] 킹

풀이 우선 좌표에 대한 dictionary를 미리 만들어두어 간단하게 방향을 찾을 수 있도록 함. 이후 킹과 돌의 좌표값을 확인한 이후 주어지는 방향에 따른 조건 분기 처리를 하여 좌표 이동을 시킴 여기서 조금 코드가 길어진 부분은 킹은 움직일 수 있지만 돌이 더이상 이동할 범위를 벗어날 경우에 대한 부분으로 물론 더 좋은 코드가 있겠지만 아래와 같이 해결. 추가 학습 우선 파이썬의 dictionary는 HashMap으로 만들며 만드는 동시에 기본값을 넣는 건 안되는건지 우선 아래와 같이 따로 하나식 추가 함. 그리고 substring으로 인자 하나만 넣을 경우 그냥 해당 인덱스에 대한 값을 가져오는 것. 계속 beginIndex라고 나오니까 헷갈렸음... 그리고 붙어있는 문자 중 숫자를 가져올 때는 s..

알고리즘 2023.12.22

[백준, 파이썬, 1063번] 킹

풀이 우선 좌표에 대한 dictionary를 미리 만들어두어 간단하게 방향을 찾을 수 있도록 함. 이후 킹과 돌의 좌표값을 확인한 이후 주어지는 방향에 따른 조건 분기 처리를 하여 좌표 이동을 시킴 여기서 조금 코드가 길어진 부분은 킹은 움직일 수 있지만 돌이 더이상 이동할 범위를 벗어날 경우에 대한 부분으로 물론 더 좋은 코드가 있겠지만 아래와 같이 해결. i import sys input = sys.stdin.readline move = { "T": [1,0], "B": [-1,0], "L": [0,-1], "R": [0,1], "LT": [1,-1], "RT": [1,1], "LB": [-1,-1], "RB": [-1,1], } k,s,n = input().rstrip('\n').split() k_..

알고리즘 2023.12.22

[백준, 파이썬, 1059번] 좋은 구간

풀이 처음에는 해당 문제에 대한 이해가 되질 않았다... 역시 알고리즘은 계속 풀면서 문제 이해하는 능력을 키워야하는 것 같다... 무튼 해당 문제에선 주어지는 집합 S에 해당하는 구간에 n을 포함하는 좋은 구간의 개수를 구하는 것으로 S = [4,8,13,24,30], n = 10 의 경우엔 8과 13 사이에 10이 속하기에 해당 구간에서 8과 13이 포함되지 않은 9와 12 사이에서 찾는것인데 처음엔 여기서 막혔다. 이유는 그러면 [ [9,10], [9,11], [9,12], [10,11], [10,12], [11,12]] 이렇게 되는거 아닌가? 그러다 문제에서 n을 포함하는 좋은 구간의 개수를 구해보자. 라는 말을 확인하게 되어 이해할 수 있었다. 이후 나머지는 간단한 연산 문제이기에 쉽게 해결되었..

알고리즘 2023.12.21

[백준, 자바, 1059번] 좋은 구간

풀이 처음에는 해당 문제에 대한 이해가 되질 않았다... 역시 알고리즘은 계속 풀면서 문제 이해하는 능력을 키워야하는 것 같다... 무튼 해당 문제에선 주어지는 집합 S에 해당하는 구간에 n을 포함하는 좋은 구간의 개수를 구하는 것으로 S = [4,8,13,24,30], n = 10 의 경우엔 8과 13 사이에 10이 속하기에 해당 구간에서 8과 13이 포함되지 않은 9와 12 사이에서 찾는것인데 처음엔 여기서 막혔다. 이유는 그러면 [ [9,10], [9,11], [9,12], [10,11], [10,12], [11,12]] 이렇게 되는거 아닌가? 그러다 문제에서 n을 포함하는 좋은 구간의 개수를 구해보자. 라는 말을 확인하게 되어 이해할 수 있었다. 이후 나머지는 간단한 연산 문제이기에 쉽게 해결되었..

알고리즘 2023.12.21

[백준, 자바, 1051번] 숫자 정사각형

풀이 3중 for문을 사용해서 문제를 해결하고자 했으며 n은 범위, m은 가로, x는 n 범위에 따른 세로로 생각하여 문제를 해결하고자 했으며 try, except를 사용한 이유는 mtx의 범위를 벗어날 경우에 break를 걸기위해 사용 그리고 더 빠른 제출을 위한 조건분기로는 큰 범위부터 찾는 것, 찾았다면 해당 for문 멈추기와 같은 것들이 있지만 그렇게까지는 하지 않아도 될 것 같아 그냥 제출 추가 학습 자바와 파이썬의 차이점으로 인한 추가 학습 내용을 정리하려고 함. 우선 2차원 배열 생성시엔 int[][] mtx = new int[n][] 로 단순히 int로 2차원 배열 생성한 다음 첫 배열에 길이를 작성해주면 됨 다음으로 공백이 없는 문자를 배열로 받을 경우엔 br.readline().toCh..

알고리즘 2023.12.20

[백준, 파이썬, 1051번] 숫자 정사각형

풀이 3중 for문을 사용해서 문제를 해결하고자 했으며 n은 범위, m은 가로, x는 n 범위에 따른 세로로 생각하여 문제를 해결하고자 했으며 try, except를 사용한 이유는 mtx의 범위를 벗어날 경우에 break를 걸기위해 사용 그리고 더 빠른 제출을 위한 조건분기로는 큰 범위부터 찾는 것, 찾았다면 해당 for문 멈추기와 같은 것들이 있지만 그렇게까지는 하지 않아도 될 것 같아 그냥 제출 import sys input = sys.stdin.readline n,m = map(int,input().split()) mtx = [list(map(int,input().rstrip("\n"))) for _ in range(n)] result = 0 for i in range(n): for j in ran..

알고리즘 2023.12.20

[백준, 파이썬, 1021번] 회전하는 큐

풀이 뭔가 애를 먹었던 부분이 else의 if 문에서 인덱스와 dq.size()/2 부분에서 정수 나누기 정수의 경우엔 정수로 되는 부분으로 한참 고생을 했다. 마지막으로 문제에서 2번,3번 연산의 최솟값을 출력하라고 해서 둘 중 작은 값으로 출력해야하는 줄 알고도 조금 ... ㅎ import sys from collections import deque input = sys.stdin.readline cnt = 0 n,m = map(int,input().split()) dq = deque(range(1,n+1)) for i in list(map(int,input().split())): while True: if i == dq[0]: dq.popleft() break else: if dq.index(i)

알고리즘 2023.12.19

[백준, 자바, 1021번] 회전하는 큐

풀이 풀면 풀 수록 자바보단 파이썬이 너무 편하다는 걸 느끼게 된다... 우선 자바에서 deque를 사용할 때엔 Deque를 사용하면서 안의 배열은 자유롭게 사용하지만 보통은 ArrayDeque나 LinkedList를 사용한다고 하는 것 같다. 그리고 다른 것은 뭐 그냥 간단한 것이기에 해결이 쉽지만 뭔가 애를 먹었던 부분이 else의 if 문에서 인덱스와 dq.size()/2 부분에서 정수 나누기 정수의 경우엔 정수로 되는 부분으로 한참 고생을 했다. 그리고 파이썬에서는 간단하게 인덱스를 찾을 수 있었지만 잘 몰라서 그런지 할 수 없다는 것을 알게 되어 따로 메서드를 정의하여 해결 마지막으로 문제에서 2번,3번 연산의 최솟값을 출력하라고 해서 둘 중 작은 값으로 출력해야하는 줄 알고도 조금 ... ㅎ ..

알고리즘 2023.12.19

[백준, 자바, 1049번] 기타줄

풀이 우선 6개 통 구매 가격, 낱개 구매 가격에 대한 배열 생성 후 값 변경한 다음 정렬 이후 낱개 6개와 6개 통 구매의 금액 비교로 조건 분기를 하며 통 구매가 더 적은 경우엔 m을 6으로 나눈 몫 만큼만 통으로 구매한 다음 나머지 개수를 낱개의 값으로 곱한것이 통으로 구매한 가격보다 큰지에 대한 조건분기 처리를 한 번 더 하여 문제 해결 import java.io.*; import java.util.*; public class 기타줄 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokeniz..

알고리즘 2023.12.18