Loading...

[백준] 2564번 경비원 (java)

이차 배열 겉을 도므로 겉을 쭉 늘여서 하나의 직선으로 본다 0 ~ m은 북쪽 m~m+n은 동쪽 m+n~ m+n+n 서쪽 영역 이런 식이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int m,n; static int n_store; static int[]stores; static int dir,len; //방향과 거리 static int sum; public static void main(String[] args) throws NumberFormatException, IO..

[백준] 2493번 탑(java)

package day03; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import java.util.Stack; import java.util.StringTokenizer; //5 // //5 3 2 1 4 public class Main { static int n; static int[] towers; public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); ..

[백준] 1244번 스위치 켜고 끄기 (java)

여자의 경우 현재의 위치를 left, right 변수를 둬서 각각 왼쪽, 오른쪽으로 이동하며 비교해나간다. import java.util.Scanner; public class Main { static int n,m; static int[] light=new int[n]; static int[][] student=new int[m][2]; public static void main(String[] args) { Scanner sc=new Scanner(System.in); n=sc.nextInt(); light=new int[n]; for (int i = 0; i < n; i++) { light[i]=sc.nextInt(); } m=sc.nextInt(); student=new int[m][2]; for..

[백준 1157번] 단어 공부 (python)

most_common은 넘겨받은 수만큼 가장 많이 등장한 값을 전해준다 배열로 변환해서 만약 길이가 1이거나 가장 많이 사용된 알파벳 개수가 여러개가 아니면 해당 값을 출력하고 가장 많이 사용된 알파벳이 여러개라면 (두 개 이상일 테니 처음 두 개의 값만 비교하면 된다) ?을 출력한다 defaultdict으로 해도 되겠지만 most_common을 사용할 수 있기에 Counter를 사용했다 import sys from collections import Counter input=sys.stdin.readline s=input().strip().upper() cnt=Counter(s) # print(len(cnt)) # print(list(cnt.most_common(2))[0][1],list(cnt.most..

[백준 9251번] LCS (파이썬, 최장 공통 부분 수열, DP)

연속된 부분 수열은 아니고 각 문자열을 이루고 있는 문자들 순서만 맞춰서 최장 공통 부분 수열을 구하는 문제이다 a, b 두 문자열의 길이 +1 (각 첫번째 인덱스에 들어가는 값은 초기값인 0이다.) 인덱스 i,j를 비교해서 a와 b의 각 위치에 들어간 문자가 같다면 이전 최대 길이 +1 을 해주면 된다. 1: acaykp , 2: capcak에서 1의 부분 문자인 a(인덱스 0)만 봤을 때 2에서 c인 경우 0, ca인 경우 1 이런식으로 추가되는 문자가 같다면 1 증가시키는 식으로 해결한다. import sys input=sys.stdin.readline a=input().strip() # 엔터키도 들어가지 않도록 b=input().strip() # print(a,len(a)) dp=[[0]*(len..

[백준 1059번] 좋은 구간 (실버 5)

어렵다.. 수학적 계산 들어가는 문제는 다 어렵다ㅠㅠ 어떡하지 a= s 집합이다 집합 가장 앞에 0을 추가하여 예외 상황 (s집합이 1개일 때, s집합에 있는 수보다 n이 작을 때 등)을 처리해준다 s집합의 원소보다 n이 작다면 right=원소-1 이고 n이 더 크다면 다음 구간도 가능한 지 찾는다 left=원소+1 1 2 3 4 5 에서 left=1, right=5, n= 3이라면 가능한 경우의 수는 3을 포함하는 경우의 수 right-left (4가지이고) (1,3) (2,3) (3,4) (3,5) 3이 경계값이 아닌 포함하는 구간은 (n-left)*(right-n)이다 (1,4) (1,5) (2,4) (2,5) import sys input=sys.stdin.readline l=int(input()..

[백준] 1010번 다리놓기 (실버)

m >=n 일 때 n개의 다리를 놓을 수 있는 경우의 수를 구하는 문제이다. n만큼 뽑아서 순서대로 놓으면 되기 때문에 조합의 수를 구하면 된다. 1. 내 풀이 5C2의 경우 n=2이고 m=5 이다. n 의 개수만큼 5*4 5부터 1씩 빼면서 곱해주고 거기서 다시 n인 2부터 n의 개수만큼만 곱한 수를 나눠주면 된다 다시 말하면 5*4 / 2*1 이 답이다. n=3인 경우는 3개씩이니까 5*4*3 / 3*2*1 이다. import sys input=sys.stdin.readline t=int(input()) for _ in range(t): n, m = map(int, input().split()) answer=1; mm=m; for _ in range(n): answer*=mm mm-=1 for i i..

[백준] 팰린드롬 만들기 (1254번, 파이썬)

www.acmicpc.net/problem/1254 1254번: 팰린드롬 만들기 동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는 www.acmicpc.net abbcd인 경우 abbcd bbcd bcd cd d (d하나는 팰린드롬임) 이렇게 검사해나가서 펠린드롬이 아니었던 abbc를 뒤집어서 d오른쪽에 cbba이렇게 붙인다고 가정한다. 즉 부분문자열이 팰린드롬이 되기까지의 왼쪽 문자열 개수만큼 더해주면 그게 답이다 s=input() for i in range(len(s)): if s[i:]==s[i:][::-1]: print(len(s)+i) break

[백준 2644번] 촌수계산 (python, dfs)

www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진 www.acmicpc.net 리스트 형태로 이어져있는 노드에 대한 정보를 다 놓고 visited 배열을 이용해 방문한 적 없는 노드들과 다 연결시킨다. dfs를 돌려도 다 연결이 안되었다면 서로 이어져있지 않는 관계이다. import sys from collections import defaultdict from collections import deque input=sys.stdin.readline def dfs(a,b):..

[백준 2343번] 기타 레슨 (이분탐색, python, binary search)

www.acmicpc.net/problem/2343 2343번: 기타 레슨 강토는 자신의 기타 레슨 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 레슨이 들어가는데, 블루레이를 녹화할 때, 레슨의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경 www.acmicpc.net 이분탐색 자체보다는 각 크기를 잘못 계산하는 바람에 계속 틀렸다 l=min(lesson)으로 해줬었는데 그러면 기준 크기 mid보다 각 음악의 길이가 더 클 때 문제가 된다. 따라서 l=max(lesson)으로 해줘서 최소 한 블루레이 크기에 한 음악은 들어갈 수 있도록 해줘야한다. import sys input=sys.stdin.readline from collections import deque n,m=map(in..