알고리즘 350

[백준, 파이썬, 1384번] 메시지

풀이 name과 check 2차원 배열을 만들어 둔 다음 반복문을 통해 받아오는 입력 값 중 첫 값은 name, 이 후의 값을 확인하여 인덱스 값을 추가한 다음 다시 반복문을 순회하며 check에 추가된 인덱스 값에 맞게 출력문을 출력하며 state에 따른 출력문 또한 함께 출력 예시에선 N으로 된 나쁜 말을 작성하는 친구가 한 명 뿐이지만 숨어있는 입력값으로는 더 많을 것으로 예상되어 아래와 같이 코드를 작성하여 해결 import sys input = sys.stdin.readline tc = 1 while True: n = int(input()) if not n: break name = [""]*n check = [[0] for _ in range(n)] state = True for i in ran..

알고리즘 2024.02.13

[백준, 자바, 1380번] 귀걸이

풀이 2*n-1 줄로 주어지는 입력 값 중 첫 번째 입력값인 인덱스를 통해 cnt 배열에서 -1 하여 마지막 for문에서 cnt의 값이 1인 인덱스를 name에서 찾아 tc 와 함께 출력하여 해결 import java.io.*; import java.util.*; public class 귀걸이 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = 1; while (true) { int n = Integer.parseInt(br.readLine()); if (n == 0) break; ArrayList n..

알고리즘 2024.02.13

[백준, 파이썬, 1380번] 귀걸이

풀이 2*n-1 줄로 주어지는 입력 값 중 첫 번째 입력값인 인덱스를 통해 cnt 배열에서 -1 하여 마지막 for문에서 cnt의 값이 1인 인덱스를 name에서 찾아 tc 와 함께 출력하여 해결 import sys input = sys.stdin.readline tc = 1 while True: n = int(input()) if not n: break name = [input().rstrip('\n') for _ in range(n)] cnt = [2 for _ in range(n)] for _ in range(2*n-1): idx, check = input().rstrip('\n').split() cnt[int(idx)-1] -= 1 for i in range(n): if cnt[i] == 1: p..

알고리즘 2024.02.13

[백준, 파이썬, 1270번] 전쟁 - 땅따먹기

풀이 테스트 케이스 이후의 주어지는 입력값 중 첫 번째 값은 땅에 있는 병사수 이후의 값은 병사의 번호로 주어지며 해당 병사의 번호를 딕셔너리 기반으로 인원을 조사할 수 있도록 했으며 결과로는 땅에 있는 인원의 절반을 mx가 초과하지 못한다는 것을 기준으로 출력하여 해결 import sys input = sys.stdin.readline for _ in range(int(input())): dic = dict() mx = 0 li = list(map(int,input().split())) for i in range(1,li[0]+1): if dic.get(li[i]): dic[li[i]] += 1 else: dic[li[i]] = 1 mx = max(dic[li[i]],mx) result = 0 if m..

알고리즘 2024.02.12

[백준, 파이썬, 1269번] 대칭 차집합

풀이 집합 요소를 사용해서 풀면 되는 간단한 문제라고 생각했으며 단순히 예시에 나온 것처럼 A-B, B-A 를 더한 값을 결과로 내기엔 시간이 더 걸릴 것 같아서 교집합을 먼저 구한 다음 각 집합의 개수에 뺀 값을 더하여 문제를 해결 import sys input = sys.stdin.readline a_ln,b_ln = map(int,input().split()) a = set(map(int,input().split())) b = set(map(int,input().split())) inter = a.intersection(b) print(a_ln+b_ln-(2*len(inter)))

알고리즘 2024.02.12

[백준, 자바, 1120번] 문자열

풀이 해당 문제는 입력 받은 b의 문자열을 a 문자열이 한칸씩 이동하면서 가장 오답이 적은 cnt를 찾아 간단히 해결 result의 초기값을 50이라고 둔 것은 최대 길이가 50이라고 했기 때문. 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 st = new StringTokenizer(br.readLine()); String a = st.nextToken(); char[] a_li = ..

알고리즘 2024.01.10