일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- programmers
- 도커
- maven-install
- 파일이 너무 커서 안들어감
- 2022 KAKAO BLIND RECRUITMENT
- 로또의 최고 순위와 처저 순위
- PostgreSQL
- 팰린드롬개수
- c드라이브에서 압축 안될때
- Linux
- 특정ip차단
- 신고결과받기
- 방화벽정책
- usb 공간있는데
- ipv6->ipv4
- 관리자권한 문제
- 프로그래머스
- db
- 데이터넘기기
- java
- LV1
- 폴더압축 권한문제
- on conflict
- 6tunnel
- Docker
- mybatis
- 압축권한
- c드라이브에서 압축
- usb 포맷시스템
- 특정ip접근
- Today
- Total
개발 기록일지
[프로그래머스] 모의테스트 팰린드롬 개수 구하기 본문
문제 설명
앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(palindrome)이라고 합니다. 예를들어서 racecar, 10201은 팰린드롬 입니다.
두 자연수 n, m이 매개변수로 주어질 때, n 이상 m 이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하도록 solution 함수를 완성해 주세요.
제한사항
- m은 500,000이하의 자연수이며, n은 m 이하의 자연수입니다.
입출력 예
입출력 예 설명
입출력 예 #1
1 이상 100 이하의 팰린드롬은 다음과 같이 18개가 있습니다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99
입출력 예 #2
100 이상 300 이하의 팰린드롬은 다음과 같이 20개가 있습니다.
101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292
풀이방법: 주어진 숫자를 String으로 변환해서 길이의 반만큼 자른다
예를들어 1001인 경우 String 으로 변환시 length가 4 , 반으로 자르면 2
그러면 반으로 자른길이까지 앞에서부터랑 뒤에서부터 서로 일치하면 true고 아니면 false로 판단해
true인것만 카운트를 센다
ex) 팰린드롬인지 판단해야 하는 숫자가 1)1001 인경우 length/2 = 20번째인덱스(1) 이랑 3번째인덱스(1) 비교
1번째인덱스(0) 이랑 2번째인덱스(0) 비교
2)12321 인 경우 length/2 = 2
0번째인덱스(1) 이랑 3번째인덱스(1) 비교
1번째인덱스(2) 이랑 2번째인덱스(2) 비교
그러면 끗
3)123501 인 경우 length/2 = 3
0번째인덱스(1) 이랑 5번째인덱스(1) 비교
1번째인덱스(2) 이랑 4번째인덱스(0) 비교 <ㅡㅡ 여기서 서로 다르므로 break !! 팰린드롬 아님!!
2번째인덱스(3) 이랑 3번째인덱스(5) 비교
위의 예시를 토대로 팰린드롬 검사함수를 짜보면
private boolean check(String str){
boolean isPalindrome=true;
for(int i=0;i<str.length()/2;i++){
if(str.charAt(i)!=str.charAt(str.length()-i-1)){
isPalindrome=false;
break;
}
}
return isPalindrome;
}
위 코드에서 인덱스를 비교하는 if부분을 잘 맞게 짜는게 포인트인듯
**전체코드**
class Solution{
private boolean check(String str){
boolean isPalindrome=true;
for(int i=0;i<str.length()/2;i++){
if(str.charAt(i)!=str.charAt(str.length()-i-1)){
isPalindrome=false;
break;
}
}
return isPalindrome;
}
public int solution(int n,int m){
int answer=0;
for(int i=n;i<=m;i++){
String num=Integer.toString(i);
if(check(num)==true)
answer++;
}
return answer;
}
'프로그래밍 > 알고리즘 풀기' 카테고리의 다른 글
[LV1]소수 만들기(JAVA) (0) | 2022.03.30 |
---|---|
[LV1]programmers 로또의 최고순위와 최저순위(JAVA) (0) | 2022.03.15 |
[LV1]programmers 신고결과받기(JAVA) (0) | 2022.03.14 |
프로그래머스 모의테스트- 직사각형의 나머지 한점구하기 (0) | 2021.08.08 |