백준 251

[백준, 자바, 1236번] 성 지키기

풀이 해당 문제는 간단하게 각 행과 열에 경비병이 있는지에 대한 유무를 조사하며 카운팅하면 되는 문제인데 다만 문제점으로는 정사각형이 아닌 직사각형이기에 조금 귀찮은 문제이다, 그래서 따로 2중 for문을 주어 해결할 수 있었다. import java.io.*; import java.util.*; public class 성지키기 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st1 = new StringTokenizer(br.readLine()); int n = Integer.pars..

알고리즘 2023.12.27

[백준, 파이썬, 1236번] 성 지키기

풀이 해당 문제는 간단하게 각 행과 열에 경비병이 있는지에 대한 유무를 조사하며 카운팅하면 되는 문제인데 다만 문제점으로는 정사각형이 아닌 직사각형이기에 조금 귀찮은 문제이다, 그래서 따로 2중 for문을 주어 해결할 수 있었다. import sys input = sys.stdin.readline n,m = map(int,input().split()) mtx = [list(input().rstrip('\n')) for _ in range(n)] cnt1 = 0 cnt2 = 0 for i in range(n): state = False for j in range(m): if mtx[i][j] == "X": state = True break if not state: cnt1 += 1 for i in rang..

알고리즘 2023.12.27

[백준, 자바, 1138번] 한 줄로 서기

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

알고리즘 2023.12.26

[백준, 파이썬, 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