developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성코테기출
  • 삼성코테기출자바풀이
  • c++ 빌더 패턴
  • 백준파이썬풀이
  • 코테파이썬
  • 통계학
  • c++디자인패턴
  • 통계분석
  • 삼성코테구현문제추천
  • Arima
  • 삼성코테자바준비
  • AR모형
  • 삼성코테파이썬준비
  • ARIMA모형
  • 시계열
  • 삼성코테파이썬
  • 데이터분석
  • 카카오코테
  • 삼성코테파이썬풀이
  • SW역량테스트파이썬
  • 삼성코테자바꿀팁
  • 시계열분석
  • SW역량테스트파이썬풀이
  • 삼성코테구현풀이
  • 삼성코테자바풀이
  • 카카오코테java풀이
  • MA모형
  • 운영체제인터럽트
  • BOJ파이썬풀이
  • 삼성코테준비

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

BOJ - 팰린드롬 만들기 1213번 (JAVA)

2022. 2. 2. 00:11

❓ 문제 - 백준 팰린드롬 만들기 1213번 - JAVA 풀이법

 

출처 

(https://www.acmicpc.net/problem/1213)

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

 

 

📝 문제해결법

1. 이 문제는 Implementation(구현) - 문자열 처리로 알고리즘을 풀었다.

  • 처음 받은 문자열에 대해 알파벳 나온 횟수를 배열에 담는다.
  • 만약 받은 문자열의 길이가 홀수이면서, 알파벳 출현 횟수가 홀수개 나온 알파벳이 1 이상이면 팰린드롬을 만들 수 없다.
  • 만약 받은 문자열의 길이가 짝수이면서, 알파벳 출현 횟수가 홀수개 나온 알파벳이 0이상이면 팰린드롬을 만들 수 없다.
  • 즉, 팰린드롬은 문자열의 길이가 짝수이면서 알파벳들이 다 짝수개 존재하거나, 문자열의 길이가 홀수이면서 다른 알파벳들은 다 짝수개 존재하고, 홀수개  존재하는 알파벳은 1개 이어야 한다.
  • 위 조건이 아닌 경우, 즉 팰린드롬을 만들 수 있을 때 알파벳을 담은 str 배열을 돌면서, 해당 알파벳 갯수의 반절씩만 담고, 만약 홀수개 존재하는 알파벳이 하나 있을 때 해당 알파벳을 포함하여 ans라는 문자열을 만든다.
  • ans라는 문자열을 java의 StringBuffer객체의 reverse라는 메소드를 사용해서 반대로 만든 후, ans+rever_ans 문자열을 붙여서 만든 팰린드롬 문자열을 출력해준다.

2. 문제를 풀면서 느낀점

  • 처음에 DFS로 List 두 개 활용해 모든 경우를 다 돌면서 해당 조건으로 문자열을 만들도록 구현했으나 메모리 초과 났음..
  • 처음 주어지는 문자열이 최대 50개라면 재귀로 완전 탐색을 하면 시간초과 이외에도, 메모리 초과가 날 수 있구나.. 명심 또 명심하자 !

 

💻 소스코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
	
	
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String s = br.readLine();
        int[] str = new int[26];
        
        int mid_Idx = 0;
        int odd = 0;
        for(int i=0;i<s.length();i++) {
        	str[s.charAt(i)-'A'] += 1;
        	
        }
        
        for(int i=0;i<str.length;i++) {
        	if(str[i]%2 == 1) {
        		mid_Idx = i;
        		odd += 1;
        	}
        }
        
        if((s.length() % 2 != 0 && odd > 1) || (s.length()%2 == 0 && odd > 0 )) {
        	bw.write(String.valueOf("I'm Sorry Hansoo"));
        } else {
        	String ans = "";
        	for(int i=0;i<str.length;i++) {
        		for(int j=0;j<str[i]/2;j++) {
        			ans += (char)(i+'A');
        		}
        	}

        	
        	String rever_ans = (new StringBuffer(ans)).reverse().toString();
        	if(odd==1) {
        		ans += (char)(mid_Idx+'A');
        	}
        	
        	bw.write(String.valueOf(ans+rever_ans));
        }
        
        bw.flush();
        bw.close();

    }


}

 

 

 

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

BOJ - 효율적인 해킹 1325번 (JAVA)  (0) 2022.02.10
BOJ - 벽 부수고 이동하기 2206번 (JAVA)  (0) 2022.02.07
BOJ - 기타줄 1049번 (JAVA)  (0) 2022.01.28
BOJ - A->B 16953번 (JAVA)  (0) 2022.01.25
BOJ - 시간 관리 1263번 (JAVA)  (0) 2022.01.24
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 효율적인 해킹 1325번 (JAVA)
    • BOJ - 벽 부수고 이동하기 2206번 (JAVA)
    • BOJ - 기타줄 1049번 (JAVA)
    • BOJ - A->B 16953번 (JAVA)
    developer-ellen
    developer-ellen

    티스토리툴바