10988  팰린드롬인지 확인하기

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String word = sc.next();
        if(palindrome(word)) System.out.println("1");
        else System.out.println("0");
    }

    private static boolean palindrome(String word) {
        int length = word.length();
        for (int i = 0; i < length / 2; i++) {
            if (word.charAt(i) != word.charAt(length - i - 1)) {
                return false;
            }
        }
        return true;
    }

}

 

코드 설명

  1. word라는 string 변수를 입력받는다.
  2. palindrome함수
    • for문으로 i가 0부터 word 길이의 절반까지 반복
      • i번째 문자인 word.charAt(i)와 대칭되는 위치의 문자인 word.charAt(length - i - 1)를 비교한다
    • 비교하는 문자가 다르면 false 반환
    • 그렇지 않으면 true 반환
  3. palindrome(word)가 true면 "1" 출력, 그렇지 않으면 "0" 출력

 

 

실행 결과

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 25206 너의 평점은  (0) 2023.09.30
[BOJ] 1316 그룹 단어 체커  (1) 2023.09.30
[BOJ] 1629 곱셈  (0) 2022.11.20
[BOJ] 5619 세 번째  (0) 2022.11.20
[BOJ] 17413 단어 뒤집기 2  (1) 2022.11.20

import re
arr = []
arr2=[]
while True:
    arr.extend(input().split())
    if arr[-1] == 'E-N-D':
        break
for i in arr:
    arr2.append(re.sub('[^a-z-]','',i.lower()))
print(sorted(arr2, key=lambda x : len(x), reverse=True)[0])

<코드 설명>

문자열들을 split하여 input해주고 이를 arr에 extend해주었다. 

arr의 마지막 원소가 'E-N-D'이면 while문을 break한다.

arr의 원소 중 알파벳(a-z, A-Z)과 하이픈(-) 빼고 제외해주었으며, 결과를 소문자로 출력해주어야 하므로 lower()해주었다. 그리고 이 를 arr2 리스트에 append해주었다.

arr2를 길이를 기준으로 sort해주고, 그 중 가장 첫번 째 원소를 출력해주었다.

 

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1316 그룹 단어 체커  (1) 2023.09.30
[BOJ] 10988 팰린드롬인지 확인하기  (0) 2023.09.30
[BOJ] 5619 세 번째  (0) 2022.11.20
[BOJ] 17413 단어 뒤집기 2  (1) 2022.11.20
[BOJ] 1543 문서 검색  (0) 2022.11.13

> 실패 코드

import itertools
tc=int(input())
arr=[]
for _ in range(tc):
    arr.append(int(input()))
per=list(itertools.permutations(arr,2))
sorted=[]
for i in per:
    num=str(i[0])+str(i[1])
    num=int(num)
    sorted.append(num)
sorted.sort()
print(sorted[2])

<코드 설명>

tc로 testcase를 input 받는다.

tc만큼 for문을 반복하여 arr에 숫자들을 입력받는다.

그리고 리스트 내의 원소를 조합해주는 itertools.permutations를 이용하여 arr의 원소들의 모든 조합을 per 변수에 저장해주었다.

per 원소에서의 첫번째 원소와 두번재 원소를 이어주어 num에 저장한 후, int로 형변환을 한다. 그리고 이를 sorted 리스트에 추가해주었다.

이 리스트를 sort해주어 세번째로 작은 수를 출력해주었다.

 

-> 하지만 메모리 초과 오류가 떴다. 아마 숫자 간의 조합을 모두 구해서 그런 것 같았다.

 

> 성공 코드

tc=int(input())
arr=[]
for _ in range(tc):
    arr.append(int(input()))
arr.sort()
sorted=[]
for i in arr[:4]:
    for j in arr[:4]:
        if i!=j:
            num=int(str(i)+str(j))
            sorted.append(num)
sorted.sort()
print(sorted[2])

<코드 설명>

앞선 코드와 달리 모든 조합을 구하지 않았다.

arr배열을 먼저 sort한 후, 작은 원소 4개까지만 지정하여 조합을 구하도록 하였다.

나머지 코드는 위와 동일하다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10988 팰린드롬인지 확인하기  (0) 2023.09.30
[BOJ] 1629 곱셈  (0) 2022.11.20
[BOJ] 17413 단어 뒤집기 2  (1) 2022.11.20
[BOJ] 1543 문서 검색  (0) 2022.11.13
[BOJ] 3077 임진왜란  (0) 2022.11.13

s=list(input())
i=0
j=0
while True:
    if i>=len(s):break
    if s[i]=="<":
        i+=1
        while s[i]!=">":
            i+=1
    elif s[i].isalnum():
        j=i
        while i<len(s) and s[i].isalnum():
            i+=1
        rev=s[j:i]
        rev.reverse()
        s[j:i]=rev
    else:
        i+=1
print("".join(s))

<코드 설명>

s를 먼저 입력받는다.i가 s의 길이보다 크거나 같을 때 while문을 빠져나오도록 하였다.

 

1. s[i]가 "<"일 때, index를 1증가시켜주고 ">"를 만날때까지 index를 증가시켜주어 그대로 출력되도록 하였다.

2. s[i]가 숫자이거나 알파벳인 경우, 시작점인 i를 j에 저장시킨 후 s[i]가 숫자이거나 알파벳이 아닐때까지 i를 증가시켜주었다. 이전에 저장하였던 시작index인 j와 마지막 index인 i까지 reverse()를 적용시켜 다시 s배열 동일 위치에 저장시켰다.

3. s[i]가 공백일 경우, index를 1 증가시켜주었다.

 

이렇게 구한 배열 s를 출력하였다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1629 곱셈  (0) 2022.11.20
[BOJ] 5619 세 번째  (0) 2022.11.20
[BOJ] 1543 문서 검색  (0) 2022.11.13
[BOJ] 3077 임진왜란  (0) 2022.11.13
[BOJ] 4889 안정적인 문자열  (0) 2022.11.13

+ Recent posts