본문 바로가기

백준

[백준] 6064 카잉 달력 java 풀이 1. 문제 설명문제 링크이란 달력이 있는데, (x,y) -> (1,1) , (2,2) 가다가 x가 M을 넘거나, y가 N을 넘으면 다시 1로 돌아온다.예제에 설명되어 있는 대로, 일때, 13번째 년도는 이 된다. , , , 순으로 온다.문제에서 M,N,x,y를 줄 때, 달력에서 가 몇 번째 년도인지 구하라.2. 접근 방식이것도 도저히 생각이 안나서 다른 사람 풀이 봤다. (요즘 왜 이렇게 풀이가 생각이 안나지? 더 열심히 해야겠다.)KEY WORD: 유클리드 호제법, LCM과 GCD의 관계먼저 ~ 까지 순서대로 번호를 매긴다고 해보자. 이때 우리가 구해야하는 는 K번째 수라고 해보자.x는 K를 M으로 나누었을 때의 나머지이고, y는 K를 N으로 나누었을 때 나머지 이다.에서 는 33번째 수인데,.. 더보기
[백준] 2302 극장 좌석 java 1. 문제 설명문제 링크뭔놈의 극장이 티켓을 샀는데, 양 옆으로 옮겨 앉을 수 있음...예를 들어 3번 좌석을 산 사람은 4번 좌석에 앉아도 되고, 2번 좌석에 앉아도 됨.하지만 3번 좌석을 산 사람이 양 옆 이외의 좌석에는 못 앉음. 예를 들어 7번 좌석이나 1번 좌석으로 이동은 불가.또, VIP석이라는 개념이 있음. 이름이랑 맞지 않게 이거 산 사람은 그냥 그 자리 앉아야함.예를 들어 7번 좌석이 VIP석이면 7번 산 사람은 7번에 무조건 앉아야함.N번까지의 좌석이 있고, 만석일 때, 사람들끼리 자리를 바꿔 앉을 수 있는 경우의 수를 구하라.2. 접근 방식도저히 못 풀겠어서 다른 사람 풀이를 봤다.KEY WORD : DP(1) 기본 원리패턴이 안 보이면, 무작정 가짓수를 적어서 패턴을 생각해봐야 한다.. 더보기
[백준] 11057 오르막수 java 문제 풀이 1. 문제 설명문제 링크숫자의 자릿수가 주어질 때, 해당 자릿수를 가지고 만들 수 있는 오르막수의 개수를 구하라.오르막수?숫자의 가장 왼쪽부터 시작해 오른쪽으로 갈수록 자릿수의 크기가 작아지지 않는 수를 오르막수라고 한다. 다시 말해,1234, 2569 등이 오르막수이다.작아지지 않으면 된다고 하였으므로,1111, 1119도 오르막수가 된다.2. 접근 방식KEYWORD: DP자릿수가 1000의 자리까지 주어진다. 중복 순열로 문제를 푼다면, O(1000!) 이니까, 당연히 문제를 풀지 못한다. 따라서 해당 문제는 DP를 사용해야 한다.그렇다면, DP는 어떻게 생각해야 할까?2차원 배열로 DP를 만들어보겠다. 세로는 자릿수, 가로는 맨왼쪽의 숫자가 무엇으로 시작하는지 나타내는 것이다. 01234567891.. 더보기
99클럽 코테 스터디 28일차 + [백준] 1874 스택 수열 java 풀이 1. 문제 설명문제 링크2. 접근 방식KEY WORD: DATA STRUCTURE(0) 현재 조회 중인 수를 value, 출력해야 하는 수를 now라고 해보자.(1) value (2) stack의 top과 now를 비교한다.(3) top이 크면 어떤 방법을 써도 수열을 만들 수 없다. NO를 출력하자.(왜냐하면, 수열은 무조건 stack에서 pop되는 값으로 만들어야 하기 때문이다. stack에는 오름차순으로 값이 저장되기에, 현 stack의 top 값이 크다고 새로 push를 받으면 더 큰 값밖에 들어오지 않는다. stack의 top이 now보다 작을 때는 같은 값이 들어올 때까지 기다리면 되는 것과 상반된다.)(4) top == now 이면 stack에서 pop해서 값을 뺀다.Stack은 진짜 sta.. 더보기
[백준] 30458 팰린드롬 애너그램 java 풀이 1. 문제 설명문제 링크문자열이 주어졌을 때, 해당 문자열의 왼쪽에서부터 N/2개의 문자, 오른쪽에서부터 N/2개의 문자를 각각 군집화 한다.(만약 N/2가 소수점을 가지면 내림한다.)각 군집에서 문자를 서로 교환하였을 때, 펠린드롬 문자가 만들어지면 Yes , 어떻게 해도 안되면, No를 출력하라.펠린드롬이란?앞에서부터 읽어도, 뒤에서부터 읽어도 같은 문자열을 의미한다.ex) 기러기, radar2. 접근 방식그냥 문제에서 주어진 그대로 풀면 된다.문자열을 왼쪽에서부터 N/2 개의 문자, 오른쪽에서 부터 N/2 개의 문자로 나눈다.각 문자들의 개수를 센다.알파벳 별로 하나라도 문자가 짝수가 아니면, 아무리 바꿔도 펠린드롬이 되지 않는다. 이때는 No를 출력한다.모든 알파벳의 개수가 짝수이다. Yes를 출.. 더보기
99클럽 코테 스터디 18일차 TIL + [백준] 5547 일루미네이션 java 완벽 설명! ^^ 1. 문제 설명2. 접근 방식KEY WORD: BFS, IDEA해당 문제는 문제를 풀기 위한 IDEA만 생각해낸다면 간단한 BFS 문제이다. 문제에 대한 접근 방식은 다음과 같다.(1) 입력받은 좌표의 변두리 부분도 페인트를 칠할 수 있다. 가령파란색으로 칠한 부분을 봐라. 만약 입력 좌표 그대로 2차원 배열을 만든다면, 해당 변두리 부분은 배열을 벗어나게 되어, 페인트를 칠할 때 골치가 아파진다. (자칫 잘못하면 OutOfArrayIndex 에러가 나기 때문이다!!)따라서 우리는 해당 좌표도 배열 내에서 받을 수 있도록 2차원 배열을 테두리까지 넉넉하게 만들고, 여기에 입력받은 좌표값들을 집어넣는다.int [][] map = new int [row+2][col+2]그러면 이렇게 받을 수 있다. 파란색으.. 더보기
[백준] 2667_단지번호 붙이기 java 쉬운 풀이! 1. 문제 설명문제 설명2. 접근 방식KEY WORD: BFS2차원 배열에 값을 담는다.번호 별로 의미가 있다. (0 = 벽, 1 = 미방문한 아파트 단지, 2 = 방문한 단지)(1) 2차원 배열을 순회하다가 값 == 1인 것을 만나면, 해당 값을 시작으로 BFS를 돌린다. 현재 값의 사방을 탐색한다. 사방의 값 중 1인 값이 있으면 큐에 넣고, 해당 위치의 값을 2로 바꾼다. 큐가 빌 때 까지 (더 이상 사방 탐색을 해도 값 = 1이 안 나올 때 까지) 반복한다.(2) 1번은 첫 조회에서 만난 아파트의 아파트 단지 전체를 한번에 보는 것이다. 따라서 1번의 반복 횟수가 곧 아파트의 개수이다.(3) 아파트 단지를 단지내 아파트의 개수에 따라 오름차순으로 정렬한다. 3. 코드 분석import java.i.. 더보기
[백준] 1522 문자열 교환 풀이 java 1. 문제 설명문제 설명2. 접근 방식KEY WORD: Sliding Window, 나머지 연산아이디어를 떠올리기가 어려워서 다른 사람의 풀이 블로그에서 아이디어 부분까지만 봤다.나는 a와 b를 일일히 교환하는데만 집중하고 있었는데, 완전히 잘못된 접근 방식이었다. 그러한 방식으로 풀었을 때, 최소값을 어떻게 찾을 수 있을지 감이 안온다. 문제를 푸는 방식은 다음과 같다. 문자열 내의 a의 개수를 세고, 그 개수를 용량으로 하는 Sliding window를 만든다.문자열의 처음부터, 1번에서 센 슬라이딩 윈도우의 용량만큼 a와 b의 개수를 센다. b의 개수 == 교환이 일어나는 횟수 이다. 현재 a의 개수만큼씩 배열을 확인하고 있고, 거기서 b의 개수를 전부 a로 돌린다면, 연속된 a와 연속된 b가 .. 더보기