일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- BFS
- Python
- 빅데이터
- 다리 만들기
- 문자열
- HashMap
- oracle
- 아스키코드
- DP
- 프로그래머스
- 백준
- 시뮬레이션
- Queue
- 탐색
- 백트래킹
- 스택
- 완전탐색
- Stack
- Java
- 배열
- SQL
- LIS
- 그리디
- 새벽코딩
- 다이나믹프로그래밍
- 구현
- 브루트포스
- dfs
- 알고리즘
- BufferedReader
Archives
- Today
- Total
새벽코딩
[SWEA] [15758] 무한 문자열 본문
반응형
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
※ JAVA 코드 (무한 문자열)
import java.util.*;
import java.io.*;
class Solution
{
public static void main(String args[]) throws Exception, IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T;
T = Integer.parseInt(br.readLine());
// 두개의 문자열을 담을 배열
String[] input = new String[2];
for(int test_case = 1; test_case <= T; test_case++)
{
// input
st = new StringTokenizer(br.readLine());
input[0] = st.nextToken();
input[1] = st.nextToken();
// 두 문자열의 각 길이
int sLen = input[0].length();
int tLen = input[1].length();
boolean chk = true;
// 만약 길이가 같다면 그냥 비교
if(sLen == tLen) {
for(int i = 0; i < sLen; i++) {
if(input[0].charAt(i) != input[1].charAt(i)) {
chk = false;
break;
}
}
}
// 만약 길이가 다르다면 두 값을 곱한수 (사실 줄일 수 있다)
else {
String tmp1 = "";
String tmp2 = "";
for(int i = 0; i < tLen; i++) {
tmp1 += input[0];
}
for(int i = 0; i < sLen; i++) {
tmp2 += input[1];
}
if(tmp1.equals(tmp2) == false) {
chk = false;
}
}
System.out.print("#" + test_case + " ");
if(chk == true) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
}
※ 생각정리 (무한 문자열)
SW Expert Academy 문제는 이전에는 많이 풀어봤었지만 블로그에 담기는 처음이네요. 우선, 문제가 무단 복사가 안된다고 하니 링크를 참고해서 문제를 풀어봅시다.
먼저, 문제를 설명하자면 길이가 50으로 제한되는 임의의 두 문자열이 무한 문자열일때 같은지 아닌지를 판별하는 문제이다. 두 문자열의 무한 문자열이 같은지 판별하는 방법을 다음과 같이 생각해보았다.
1. 두 문자열의 길이가 같을때 - 두 문자열이 완벽히 동일해야한다.
2. 두 문자열의 길이가 다를때 - 두 문자열 길이의 최소 공배수가 될때까지 반복했을때 두개의 문자열이 동일해야한다.
2번 조건에 대해서는 사실 두 수의 최대공배수를 구하여 문제를 풀 수 있었지만 문자열의 길이가 최대로 길어져도 2500자정도가 나올 수 있기때문에 그냥 서로 다른 문자열의 길이만큼 곱(반복)해 더하였다.
3. 최종적으로는 두문자열이 동일한지 equal 체크해준다.
-새벽코딩-
반응형
'알고리즘' 카테고리의 다른 글
[백준][24480] 알고리즘 수업 - 깊이 우선 탐색 2 (dfs) (JAVA) (0) | 2023.03.18 |
---|---|
[SWEA] [15612] 체스판 위의 룩 배치 (0) | 2023.03.15 |
[백준] [12891] DNA 비밀번호 (문자열, 슬라이딩윈도우) (JAVA) (0) | 2023.03.13 |
[백준] [1755] 숫자놀이 (문자열, 구현) (JAVA) (0) | 2023.03.13 |
[백준] [1976] 여행가자 (Union-Find) (JAVA) (0) | 2023.03.12 |
Comments