Computer Sciences/Problem Solve(155)
-
[Programmers] 숫자 문자열과 영단어 - Java
https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 이 문제는 replaceAll() 메서드만 알고 있으면 간단하게 풀리는 문제다. class Solution { private static String[] nums = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; public int solution(St..
2021.12.12 -
[Programmers] 신규 아이디 추천 - Java
https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 문제를 보자마자 정규식을 써서 풀어야 될 거라고 생각했다. 자바에서는 replaceAll()이라는 함수로 정규식을 이용해 문자열을 치환할 수 있다. 정규식을 알면 어렵지 않게 풀 수 있는 문제다. 정규식은 간략하게 정리하면 다음과 같다. 자바에서 정규식을 쓸 때 주의할 점은 정규식 기호를 문자로 매칭하려면 백슬래시(\)를 두 개 붙어줘야 한다. Group..
2021.12.11 -
[Programmers] 로또의 최고 순위와 최저 순위 - Java
https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 풀이 문제 풀이의 핵심은 최고 순위는 매칭된 숫자 개수 + 0의 개수이고 최저 순위는 매칭된 숫자 개수라는 것이다. 2중 for 문으로 각 요소를 비교한 뒤에 0의 개수를 세는 식으로 다음과 같이 어렵지 않게 풀어낼 수 있다. 아래는 필자가 처음으로 해결했을 때 작성한 코드이다. 먼저 각 배열을 정렬한 후에 0의 개..
2021.12.10 -
[Baekjoon] 1292번: 쉽게 푸는 문제 - Java
https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 문제 설명 문제 그대로 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ... 로 이루어진 수열에서 입력받은 숫자 사이의 구간의 합을 구하면 된다. 최대 인덱스가 1000이므로 ArrayList로 숫자를 미리 저장해둔 뒤 해당 구간에 해당하는 숫자들을 읽어서 더하는 식으로 간단하게 풀었다(문제 이름 그대로). 문제 풀이 import java.io.*; import java.util.*; public class Ma..
2021.12.10 -
[Baekjoon] 1339번: 단어 수학
1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 이 문제는 문자의 합이 최대일 경우를 계산하는 그리디 알고리즘 문제였습니다. 저는 이 문제를 다음과 같이 분석했습니다. 각 문자에 해당하는 자릿수(예제 2의 경우 G = 100, C = 10, F = 1)의 값을 int[26]의 알파벳 배열에 저장한다 저장된 배열을 크기순으로 정렬한다 9부터 0까지 내려가며 정렬된 배열의 값과 곱한 값들을 더한 뒤 결과를 출력한다 예제 2를 활용하여 예를 들어보겠습니다. 두 문자열 GCF, ACDEB 가 있습니다. 먼저 G..
2021.07.10 -
[Baekjoon] 2751번: 수 정렬하기 2
2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 이 문제는 시간 복잡도가 n log n 이하인 알고리즘을 적용하여 풀어야 하는 문제였습니다. 저는 병합 정렬을 사용하여 해결하였습니다. 처음에는 계속 시간 초과가 나오길래 뭔가 싶었는데 res 배열을 MergeTwoArea에서 만들어서 나온 것이었습니다. static으로 선언하니 해결되었습니다. 인스턴스 변수로 선언하면 1,000,000 과 같은 큰 크기의 배열을 계속 만들어내서 발생한 문제였던 것 같습니다. import java.io.Buffere..
2021.06.02