일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- MYSQL
- Vue
- n과 m
- 소수 판정
- 프로젝트
- springboot
- JPA
- 브루트포스 알고리즘
- 백트래킹
- DB
- 다이나믹 프로그래밍
- 깊이 우선 탐색
- 그래프 이론
- 정수론
- 정보처리기사
- 스택
- 배포
- 자료 구조
- Spring Security
- 문자열
- 프로그래머스
- 재귀
- dfs
- 백준
- 너비 우선 탐색
- 그래프 탐색
- SWEA
- 구현
- 수학
- 알고리즘
Archives
- Today
- Total
영원히 남는 기록, 재밌게 쓰자
SWEA D3 [10570] 제곱 팰린드롬 수 본문
728x90
반응형
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
펠린드롬을 판별하는 로직이 계속 손에 익지 않았다..
- 해당 문자열 길이의 절반 만큼 반복한다.
- 해당 인덱스의 문자와 중심 인덱스를 기준으로 반대의 문자를 다음과 같이 잡는다.
str.length() - 1 - i -> (전체 길이) - (해당 인덱스)
펠린드롬 확인 로직 전체 코드
for (int i = 0; i < str.length() / 2; i++) {
if (str.charAt(i) != str.charAt(str.length() - 1 - i)) {
return false;
}
}
놓친 부분
문제에서 양의 정수에 대해서 펠린드롬을 구해야 하므로 제곱근이 정수인지 판별을 하기 위해 올림이나 내림을 했을 때
정수값이 동일한 경우 int로 형변환 후 제곱근에 대해서 펠린드롬을 검사했다.
double sqrtNum = Math.sqrt(num);
if (sqrtNum != Math.ceil(sqrtNum)) { // 제곱근이 정수인지 검사해야 함
return false;
}
정답 코드
package com.swea.D3.p10570;
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int t = 1; t <= T; t++) {
sb.append("#" + t + " ");
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int cnt = 0;
for (int i = A; i <= B; i++) {
if (isPalindrome(i)) {
cnt++;
}
}
sb.append(cnt + "\n");
}
System.out.println(sb);
}
static boolean isPalindrome(int num) {
String str = String.valueOf(num);
for (int i = 0; i < str.length() / 2; i++) {
if (str.charAt(i) != str.charAt(str.length() - 1 - i)) {
return false;
}
}
double sqrtNum = Math.sqrt(num);
if (sqrtNum != Math.ceil(sqrtNum)) { // 제곱근이 정수인지 검사해야 함
return false;
}
str = String.valueOf((int) Math.sqrt(num));
for (int i = 0; i < str.length() / 2; i++) {
if (str.charAt(i) != str.charAt(str.length() - 1 - i)) {
return false;
}
}
return true;
}
}
728x90
반응형
'Algorithm > SWEA' 카테고리의 다른 글
SWEA D3 [8673] 코딩 토너먼트1 (0) | 2024.05.06 |
---|---|
SWEA D3 [9317] 석찬이의 받아쓰기 (0) | 2024.04.11 |
SWEA [1289] 원재의 메모리 복구하기 D3 (1) | 2024.02.17 |
SWEA [5215] 햄버거 다이어트 D3 (0) | 2024.02.16 |
SWEA [2805] 농작물 수확하기 D3 (0) | 2024.02.14 |