알고리즘 315

[백준, 자바, 1296번] 팀 이름 정하기

풀이 처음 해당 문제를 해결하고자 했을 때는 맵을 사용해서 해결하고자 했지만 수치 변경 이외엔 너무 불편하여 배열을 사용하여 해결하고자 했으며 각 팀 이름에 대한 비율을 새로 계산해야 했기에 deepcopy를 사용하여 해결. import java.io.*; import java.util.*; public class 팀이름정하기 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String yeon = br.readLine(); ArrayList li = new ArrayList(Collections.nCopies(4..

알고리즘 2024.01.02

[백준, 파이썬, 1296번] 팀 이름 정하기

풀이 처음 해당 문제를 해결하고자 했을 때는 딕셔너리를 사용해서 해결하고자 했지만 수치 변경 이외엔 너무 불편하여 배열을 사용하여 해결하고자 했으며 각 팀 이름에 대한 비율을 새로 계산해야 했기에 deepcopy를 사용하여 해결. import sys import copy input = sys.stdin.readline def find(name, dic): for i in name: if i == 'L': dic[0]+=1 elif i == 'O': dic[1]+=1 elif i == 'V': dic[2] += 1 elif i == 'E': dic[3] += 1 return yeon = input().rstrip('\n') dic = [0, 0, 0, 0] find(yeon,dic) n = int(inpu..

알고리즘 2024.01.02

[백준, 자바, 1225번] 이상한 곱셈

풀이 해당 문제는 단순히 각 자리의 값을 곱하는 2중 for문으로 접근하여 해결하려 하니까 시간 초과가 계속 발생해서 방법을 찾아보니 각 자리의 합을 먼저 구한 다음 곱하면 된다는 것을 알게 되어 아래와 같이 간단하게 해결할 수 있었다. 추가 학습 파이썬은 위와 같이 적용했을때 되었는데 자바에선 왜 안되는건지 생각해보다가 혹시 int의 초과 값 때문인건지 생각이 들어 Long으로 타입을 변경 후 제출하니 해결할 수 있었다. import java.io.*; import java.util.*; public class 이상한곱셈 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(ne..

알고리즘 2023.12.29

[백준, 파이썬, 1225번] 이상한 곱셈

풀이 해당 문제는 단순히 각 자리의 값을 곱하는 2중 for문으로 접근하여 해결하려 하니까 시간 초과가 계속 발생해서 방법을 찾아보니 각 자리의 합을 먼저 구한 다음 곱하면 된다는 것을 알게 되어 아래와 같이 간단하게 해결할 수 있었다. a,b = input().split() a_ln,b_ln = len(a),len(b) a,b = int(a),sum([int(i) for i in b]) result = 0 for i in range(a_ln): result += b*(a%10) a //= 10 print(result)

알고리즘 2023.12.29

[백준, 자바, 1015번] 수열 정렬

풀이 해당 문제는 무슨 말인가 하다가 입력값과 출력값을 확인해보니 큰 순서에 따라 번호를 메기는 문제로 파악하여 아래와 같이 해결할 수 있었다. 우선 result는 입력 받는 배열의 크기만큼 생성 후 초기값을 따로 설정하고 이후 2중 for문으로 계속 처음부터 조회할 수 있도록 했으며 result[j] 가 초기값 -1이 아닐 경우엔 넘어가고 low 값보다 result[j]가 작다면 변경 후 idx 또한 함께 바꾼다음 반복문이 마치면 그때 result 값을 변경해줘서 문제를 해결. 추가 학습 자바에서 ArrayList로 원하는 크기로 초기값을 넣어주고 싶다면 new ArrayList( Collections.nCopies(num, value) ) li.get(j)) { low = li.get(j); idx ..

알고리즘 2023.12.28

[백준, 파이썬, 1015번] 수열 정렬

풀이 해당 문제는 무슨 말인가 하다가 입력값과 출력값을 확인해보니 큰 순서에 따라 번호를 메기는 문제로 파악하여 아래와 같이 해결할 수 있었다. 우선 result는 입력 받는 배열의 크기만큼 생성 후 초기값을 따로 설정하고 이후 2중 for문으로 계속 처음부터 조회할 수 있도록 했으며 result[j] 가 초기값 -1이 아닐 경우엔 넘어가고 low 값보다 result[j]가 작다면 변경 후 idx 또한 함께 바꾼다음 반복문이 마치면 그때 result 값을 변경해줘서 문제를 해결. import sys input = sys.stdin.readline n = int(input()) li = list(map(int,input().split())) result = [-1]*n for i in range(n): l..

알고리즘 2023.12.28

[백준, 자바, 1264번] 모음의 개수

풀이 해당 문제는 처음엔 각 모음의 개수를 출력할 줄 알았지만 난이도인 만큼 전체 개수를 조회하는 문제로 입력받은 문장을 모두 소문자로 변경한 다음 값이 배열안에 있다면 카운팅하는 것으로 해결 물론 초음에 모음을 담은 li를 set로 하면 파이썬에서는 hash로 접근하여 인덱스로 찾게되어 더 빠르게 조회가 가능하지만 따로 시간에 대한 여유가 있어 익숙한 배열로 문제 해결. 그리고 조건을 활용하여 반복문 탈출이 가능하도록 하기. 추가 학습 자바에서 배열 생성시 초기값으로 원하는 값을 넣고자 한다면 List 으로 설정 후 Arrays.asList() 안에 값을 넣어주면 된다. import java.io.*; import java.util.*; public class 모음의개수 { public static v..

알고리즘 2023.12.28

[백준, 파이썬, 1264번] 모음의 개수

풀이 해당 문제는 처음엔 각 모음의 개수를 출력할 줄 알았지만 난이도인 만큼 전체 개수를 조회하는 문제로 입력받은 문장을 모두 소문자로 변경한 다음 값이 배열안에 있다면 카운팅하는 것으로 해결 물론 초음에 모음을 담은 li를 set로 하면 파이썬에서는 hash로 접근하여 인덱스로 찾게되어 더 빠르게 조회가 가능하지만 따로 시간에 대한 여유가 있어 익숙한 배열로 문제 해결. 그리고 조건을 활용하여 반복문 탈출이 가능하도록 하기. import sys input = sys.stdin.readline while True: li = ['a', 'e', 'i', 'o', 'u'] cnt = 0 ip = list(input().rstrip('\n').lower()) if ip == ['#']: break for i ..

알고리즘 2023.12.28

[백준, 자바, 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