본문 바로가기
TIL🔥/코딩테스트

[항해99클럽] Java 비기너_Day 1 명령 프롬프트, 팰린드롬

by hk713 2025. 3. 31.

오늘의 문제 >> 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()가 큰 영향을 주지 않아서 생략해도 된다고 한다~

댓글