오늘의 문제 >> https://www.acmicpc.net/problem/1032
항상 코테는 Python으로 풀어 왔는데, 이번에는 Java로 도전해보려고 한다❤️🔥
근데 아무 준비없이 문제를 풀려고 보니, 기본 문법조차 기억이 안나서 당황스러웠다.
그래서 일단 python으로 풀고, 내가 구현한 로직을 java문법으로 고치는 방법으로 진행했다.
[ 생각 흐름 ]
모든 파일명의 길이가 같으니,
첫번째 파일명을 기준으로 첫번째 글자부터 마지막 글자까지 for문으로 돌면서,
이중 for문으로 입력된 모든 파일들의 동일 자리의 문자를 비교해야겠다 생각했다.
[ Python ]
N = int(input())
file_lst = []
for _ in range(N):
file_name = input()
file_lst.append(file_name)
length = len(file_lst[0])
answer = [0]*length
for i, char in enumerate(file_lst[0]):
for item in file_lst:
if item[i] == char:
answer[i] = char
else:
answer[i] = "?"
break
print(''.join(answer))
[ Java ]
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine();
List<String> fileNames = new ArrayList<>();
for(int i=0; i<N; i++){
fileNames.add(sc.nextLine());
}
sc.close();
int nameLength = fileNames.get(0).length();
char[] answer = new char[nameLength];
for (int i=0; i<nameLength; i++){
char trgtChar = fileNames.get(0).charAt(i);
boolean isSame = true;
for(String file: fileNames){
if (file.charAt(i) != trgtChar){
isSame = false;
break;
}
}
answer[i] = isSame ? trgtChar: '?';
}
System.out.println(new String(answer));
}
}
오늘의 추가 문제 >> https://www.acmicpc.net/problem/10988
[ 생각 흐름 ]
입력된 문자열 길이를 구해 절반까지의 인덱스를 가지고 앞,뒤로 비교하면 될 것 같았다.
[ Java ]
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String trgtWord = sc.nextLine();
sc.close();
int answer = 1;
char[] wordArray = trgtWord.toCharArray();
int maxIdx = trgtWord.length();
for (int i=0; i<maxIdx/2; i++){
if (wordArray[i] != wordArray[(maxIdx-(i+1))]){
answer = 0;
break;
}
}
System.out.println(answer);
}
}
[ 문제풀이 ]
방법 1. 문자열을 역순으로 고쳐 비교하는 방법
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //문자열 받아오기
String word = sc.nextLine(); //입력 문자열
String reversedWord = new StringBuilder(word).reverse().toString(); //역순
//참고 - if(word == resversedWord){}; 이렇게 하면 문자열 주소 값으로 비교하게 됨
if(word.equals(reversedWord)){ //담긴 값을 비교함!
System.out.println(1);
} else{
System.out.println(0);
}
}
}
방법 2. 문자열 인덱스로 비교하는 방법!
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String word = sc.nextLine(); //입력 문자열
int left = 0;
int right = word.length()-1;
while(left<right){
if(word.charAt(left) != word.charAt(right)){
System.out.println(0);
return;
}
left++;
right--;
}
}
}
>> 내 생각흐름이랑 비슷한데 훨씬 더 깔끔한 코드다..!
charAt을 사용하면 문자열을 배열로 바꾸지 않아도 index를 적용할 수 있다는 걸 배웠다ㅎㅎ
+코테에서는, scanner.close()가 큰 영향을 주지 않아서 생략해도 된다고 한다~
'TIL🔥 > 코딩테스트' 카테고리의 다른 글
[항해99클럽] Java 비기너_Day 3 !!초콜릿 중독 주의!! (0) | 2025.04.02 |
---|---|
[항해99클럽] Java 비기너_Day 2 문자열 분석 (0) | 2025.04.01 |
[백준] 15894번 - 수학은 체육과목 입니다 (1) | 2024.01.08 |
[백준] 10807번 - 개수 세기 (0) | 2022.11.03 |
[이코테] 복잡도 (0) | 2022.11.03 |
댓글