본문 바로가기

Coding Test/Problem Number

(75)
[Java] 팰린드롬 파티션 [2705번] https://www.acmicpc.net/problem/2705예제 입력134720예제 출력14660문제 접근중앙값을 기준으로 좌우가 동일해야 함1 2 3 2 1 ⇒ 1 2 와 2 1로 일치하지 않아 팰린드롬 파티션이 아님1 2 1 3 1 2 3 ⇒ 1 2 1과 1 2 1로 일치하여 팰린드롬 파티션문제 해결N - 2의 값의 중앙값에 +2를 더한 것과, N / 2의 경우의 수를 더해주면 N의 값이 나옴즉, N[6] = N[4] + N[3]의 식이 도출메모리제이션 기법으로 Map을 이용하여 N[i]의 값(경우의 수)을 Map에 저장하고 Map에 있는 값이라면 get으로 리턴슈도 코드static memorizationT(테스트 케이스 저장)for(T번 반복){ Partition(입력값)}Partition(..
[Java] Z [1074번] https://www.acmicpc.net/problem/1074예제 입력12 3 1예제 출력111예제 입력23 7 7예제 출력263예제 입력31 0 0예제 출력30예제 입력44 7 7예제 출력463예제 입력510 511 511예제 출력5262143예제 입력610 512 512예제 출력6786432문제 접근N이 1인 경우에는 순서대로 0, 1, 2, 3을 출력하도록 설정N이 2이상인 경우 2^(N-1)의 크기로 4등분을 한 후 재귀 함수문제 해결하나 하나 순차적으로 진행을 하게 되면 N의 최대값이 15로 2^15으로 32,768 * 32,768의 길이가 되어 재귀 함수로 인한 Stack Overflow가 발생핵심은 구해야 할 row, col을 가지고 몇 사분면에 포함이 되는 지 확인사분면이 확인 되면 다..
[Java] 서로 다른 부분 문자열의 개수 [11478번] https://www.acmicpc.net/problem/11478예제 입력1ababc예제 출력112문제 접근문자열을 입력 받아 1개 ~ 문자열 길이까지의 모든 문자열을 저장단, 겹치는 문자열은 제외하고 서로 다른 것의 개수만 출력문제 해결Set을 이용하여 모든 경우의 수 저장하고 사이즈 출력슈도 코드str(문자열 저장)subSet(중복되지 않는 Set 선언)for(start = 0 ~ 문자열 길이 전까지 반복){ for(end = start+1 ~ 문자열 길이까지 반복){ set에 str.substring(start, end) 저장 }}subSet 사이즈 출력코딩하기public static void main(String[] args) throws Exception{ BufferedReader b..
[Java] 파일 정리 [20291번] https://www.acmicpc.net/problem/20291예제 입력18sbrus.txtspc.spcacm.icpckorea.icpcsample.txthello.worldsogang.spcexample.txt예제 출력1icpc 2spc 2txt 3world 1문제 접근확장자를 기준으로 확장자 이름과 해당 확장자가 몇 개인지 출력무조건 온점( . )으로 확장자 구분확장자의 이름 순으로 내림차순 정렬문제 해결트리맵으로 쉽게 풀릴 것 같음N번만큼 반복문을 돌려서 확장자를 Map에 추가, 존재한다면 Value를 1증가슈도 코드 트리맵 선언fileCont (파일 개수 저장)for(fileCont번 반복){ str(파일 이름 저장) extension = str.subString(str.indexOf(".")..
[Java] 회사에 있는 사람 [7785번] 예제 입력14Baha enterAskar enterBaha leaveArtem enter예제 출력1AskarArtem문제 접근출입 기록의 수가 최대 10$^6$이므로 시간 복잡도가 O(N$^2$)이면 1조로 시간 초과enter와 leave가 찍힌 사원은 퇴근한 사원대소문자가 다른 경우 다른 사람문제 해결동명이인이 없으니 Set으로 저장하고 한 번 더 나올 경우 삭제슈도 코드N(출입 기록 개수)Set overWork(직원 저장 자료구조)for(N번 반복){ emp에 직원 이름만 저장 if(overWork에 포함된 직원이면){ 제거 continue; } set에 추가}set에 있는 직원 전체 출력코딩하기public static void main(String[] args) throws Exception{ ..
[Java] 수 이어 쓰기 1 [1748번] https://www.acmicpc.net/problem/1748예제 입력15예제 출력15예제 입력215예제 출력221예제 입력3120예제 출력3252문제 접근1 ~ N까지 숫자를 이어 붙혀야 하는데, N이 100,000,000이기 때문에 문제가 발생일반적인 사고 방식으로 StringBuilder를 이용하여 이어 붙일 경우 메모리 초과 발생수학적 연산이 필요문제 해결일의 자리, 십의 자리, 백의 자리마다 정해진 범위가 있고 길이가 고정일의 자리 ⇒ 1 ~ 9, 길이 1십의 자리 ⇒ 10 ~ 99, 길이 2백의 자리 ⇒ 100 ~ 999, 길이 3start와 end의 값을 1과 9로 셋팅을 하고 입력받은 N보다 큰 지, 작은지로 판별계산이 한 번 끝날 때마다 start와 end의 범위 증가1의 자리 ⇒ s..
[Java] 알고리즘 수업 - 피보나치 수 1 [24416번] https://www.acmicpc.net/problem/24416예제 입력15예제 출력15 3예제 입력230예제 출력2832040 28문제 접근재귀 호출 피보나치 수열과 동적 프로그래밍 피보나치 수열의 연산 횟수 계산문제 해결2개의 함수를 만들어서 각각 카운팅 값을 출력슈도 코드static recursionFiboCntstatic dpFiboCntN (피보나치 수열의 N번째 값)recursionFibo(N)dpFiboCnt(N)recursionFiboCnt 출력dpFiboCnt 출력recursionFibo(N){ if(N이 1 또는 2면) { 1 반환 recursionFiboCnt 1증가 } recursionFibo(N-1) + recursionFibo(N-2) 반환}dpFiboCnt(N){ f[N..
[Java] 칸토어 집합 [4779번] https://www.acmicpc.net/problem/4779예제 입력10132예제 출력1-- -- - - - - - - -- - - -문제 접근“-”를 3$^N$만큼 반복하여 문자열 생성문자열을 3등분하여 가운데 부분을 공백으로 변경각 선에 대해 2번을 반복하고 선의 길이가 1일 때 멈춤문제 해결각 재귀마다 총 길이 / 3을 한 값인 sublength 저장sublength ~ sublength * 2의 값을 공백으로 대체재귀함수(왼쪽) + 가운데 공백 만큼 공백 + 재귀함수(오른쪽) 반환슈도 코드while(입력이 없을 때까지 반복){ N(N 저장) str에 -를 3^N번 만큼 저장 res = recursion(str, 길이) res 출력}recursion(str, 전체길이)..