[BOJ:1342 / JAVA] 행운의 문자열
·
Algorithm/BOJ & SWEA
https://www.acmicpc.net/problem/1342 1. 문제 요약 입력받은 문자열에 대해서 서로 인접해있는 문자가 같지 않은 문자열이면 행운의 문자열 이라고 한다. 문자열 내의 문자를 재배치하여 인접해 있는 문자가 서로 같지 않게 만들어 행운의 문자열이 몇개 나오는지 개수를 세는 문제 2. 알고리즘 (접근 방법) ○ 백트래킹 + DFS (재귀) 1. 해당 문자들을 재배치하기 위해서는 문자열내의 문자가 각각 몇개씩 있는지 셀 수 있는 카운트 배열을 두었다. char[] strArr = str.toCharArray();for(char ch : strArr) { int x = ch - 'a'; count[x]++;}입력받은 문자열을 문자 배열로 만들어준다. 반복문을 돌리..
[BOJ: 1005/ JAVA] ACM Craft
·
Algorithm/BOJ & SWEA
https://www.acmicpc.net/problem/1005 1. 문제 요약특정 건물을 가장 빨리 지을 때까지 걸리는 최소 시간을 알아내는 프로그램 ※ 주의할 점 최소 시간을 알아내는 프로그램 이라지만, 동시에 건축을 해야하는 건물의 경우 그 건물들이 모두 건축이 완성되어야 다음 건물을 건축할 수 있기 때문에 최소 시간을 그리 신경쓸 필요 없는 듯 하다. 2. 알고리즘 (접근 방법) ○ 위상 정렬 방식 (Queue) 여기서 정점은 건축물을 말하는 것이며, 진입차수는 해당 건축물과 연결된 이전 건축물과의 간선이 몇개인지를 말하는 것이다. 1005번 사진에서는 1, 2, 3, 4 건축물들이 모두 정점임을 의미하고, 1번 정점이 3번 정점과 연결되어 있고 이를 간선이라고 표한다. 여기서 3번 정점..
[BOJ: 7785/ JAVA] 회사에 있는 사람
·
Algorithm/BOJ & SWEA
https://www.acmicpc.net/problem/7785 1. 문제 요약출퇴근 로그를 통해 현재 회사에 있는 모든 사람을 구하는 프로그램 작성 ※ 주의할 점 현재 회사에 있는 사람의 이름을 사전 순의 역순으로 출력해야 한다. 2. 알고리즘 (접근 방법) ○ 첫번째 방식 (HashMap - Array.sort) 1. HashMap 을 이용하여, 직원 이름을 Key 값으로 삼고, "enter" 인 상태일 때만 HashMap 에 put 해주었다. 2. 기존에 "enter" 로 Map에 저장된 직원이 "leave" 로그로 입력받은 경우, 직원이름 Key 를 호출하여 해당 직원을 Map 에서 삭제 해주었다. 3. "enter" 로 Map 에 저장되어 있는 직원들의 이름이 역순으로 정렬해주..
[백준:2903/Python] 중앙 이동 알고리즘
·
Algorithm/BOJ & SWEA
문제 요약 1. 정사각형의 각 변의 중앙에 점을 하나 추가한다. 2. 정사각형의 중심에 점을 하나 추가한다. 문제 풀이 오늘도, 선 정답 후 풀이를 하려 한다. 내가 푼 풀이는 아래와 같다. n = int(input()) print((1+(2**n))**2) 생각보다 단순한 코드였다. 먼저, 점의 개수가 늘어나는 규칙을 찾아본다면, 초기 -> 점 4개 N=1 -> 점 9개 N=2 -> 점 25개 N=3 -> 점 81개 이다. 이를 풀어서 작성한다면, 4 =2**2 9 = 3**2 25 = 5**2 81= 9**2 이렇게 된다. 그럼 여기서 알 수 있는 것은 사진에서 처럼 보이는 한 변의 길이만 구한 뒤, 정사각형의 넓이 구하는 형식(가로 * 세로)으로 풀면 점의 개수를 구할 수 있다는 것이다. 여기서 변..
[백준:2745/Python] 진법 변환 문제
·
Algorithm/BOJ & SWEA
진법이란? 0부터 n개의 숫자를 사용하여 수를 표현하는 방법으로 0~(n-1)만큼 표현한다. 수를 표기하는 기수법의 하나로 임의의 숫자를 사용하여 수를 표현하는 방법이다. 문제 요약 B진법 수 N이 주어지면 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하는 문제이다. 예를 들어, 10진법을 넘어가게 되면 알파벳 대문자를 이용하는데 A : 10, B: 11, ... ,Z : 35 처럼 알파벳 대문자는 각각 위의 숫자를 의미하게 된다. 문제 풀이 먼저 내가 푼 풀이를 공유하자면, 아래와 같다. import sys n,b = sys.stdin.readline().split() sum = 0 for i in range(len(n)) : # 0 ~ 문자열길이까지 if (n[(len(n)-1)-i].isdig..
[백준:15829/Python] Hashing 문제
·
Algorithm/BOJ & SWEA
해시함수 란 ? 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 자료의 저장과 탐색에 쓰인다. 문제 요약 문제 a ~ z 까지 고유한 번호 1 ~ 26으로 부여해 준다. 입력받은 영어로 된 문자열을 고유한 번호로 바꿔준 뒤, 이 수열을 하나의 정수로 치환하기 위해 모든 수열을 더해준다. 그리고 다 더한 값을 유한한 범위를 갖기 위해 적당히 큰 수 M 으로 나눠준다. 이렇게 나오게 되는 것이 해시값이다. 하지만, 서로 다른 문자열이라도 동일한 해시값을 가질 수 있으며, 이를 해시충돌이라고 한다. 이러한 해시충돌을 줄이기 위해 수열의 각 항마다 고유한 계수를 부여하면 되는데 가장 대표적인 방법이 항의 번호에 해당하는 만큼 특정한 숫자 r을 거듭제곱해서 곱해준 다음 더하는 것이다. 이 문제에..