😀
fistkim TECH BLOG
  • Intro
  • 강의
    • Reactive Programming in Modern Java using Project Reactor
      • Reactor execution model 1
      • Reactor execution model 2
      • Reactor execution model 3 - parallelism
      • Reactor execution model 4 - overview
      • Transform
      • Combine
      • Side Effect Methods
      • Exception/Error handling
      • retry, retryWhen, repeat
      • BackPressure
      • Cold & Hot Streams
    • NEXTSTEP 클린코드 with java 9기
      • 정리노트
    • NEXTSTEP DDD 세레나데 2기
      • CH01 도메인 주도 설계 이해
      • CH02 크게 소리 내어 모델링 하기
      • CH03 도메인 주도 설계 기본 요소
      • CH04 도메인 주도 설계 아키텍처
      • CH05 도메인 이벤트
    • NEXTSTEP 인프라 공방 1기
      • 망 분리하기
      • 통신 확인하기
      • 도커 컨테이너 이해하기
      • [미션 1] 서비스 구성하기 실습
      • [미션 2] 서비스 배포하기 실습
      • 서버 진단하기
      • 어플리케이션 진단하기
      • [미션 3] 서비스 운영하기
      • 웹 성능 진단하기
      • 부하 테스트
      • k6
      • [미션 4] 성능 테스트
      • 리버스 프록시 개선하기
      • 캐싱 활용하기
      • [미션 5] 화면 응답 개선하기
      • Redis Annotation 및 설정
      • 인덱스 이해하기 & DB 튜닝
      • [미션 6-1] 조회 성능 개선하기
      • [미션 6-2] DB 이중화 적용
    • NEXTSTEP 만들면서 배우는 Spring 3기
      • CH01 올바른 방향 바라보기
      • CH02 HTTP 이해 - 웹 서버 구현
        • HTTP 파싱
        • HTTP 웹 서버 구현
      • CH03 MVC - @MVC 프레임워크 구현
        • Servlet 다시 짚기
        • Cookie, Session 다시 짚기
        • MVC 프레임워크 구현
      • CH04 나만의 라이브러리 구현
      • CH05 DI - DI 프레임워크 구현
      • CH06 Aspect OP
    • 스프링 시큐리티
      • 스프링 시큐리티 아키텍처
      • WebAsyncManagerIntegrationFilter
      • SecurityContextPersistenceFilter
      • HeaderWriterFilter
      • CsrfFilter
      • (+) 스프링 시큐리티 + JWT
      • (+) 마치며
    • 더 자바, 코드를 조작하는 다양한 방법
      • CH01 JVM 이해하기
      • (+) 클래스 로더 이해하기
      • CH02 바이트 코드 분석 및 조작
      • (+) jacoco
      • CH03 리플렉션
      • CH04 다이나믹 프록시
      • CH05 애노테이션 프로세서
    • 더 자바, 애플리케이션을 테스트하는 다양한 방법
      • CH01 JUnit 5
      • CH02 Mockito
      • (+) Spy vs Mock
      • CH03 도커와 테스트
      • CH04 성능 테스트
      • (+) VisualVM
      • (+) 테스트 자동화
      • CH05 운영 이슈 테스트
      • CH06 아키텍처 테스트
    • 모든 개발자를 위한 HTTP 웹 기본 지식
      • CH01 인터넷 네트워크
      • CH02 HTTP 기본
      • CH03 HTTP 메서드 속성
      • CH04 HTTP 메서드 활용
      • CH05 HTTP 상태코드
      • CH06 HTTP 헤더1 - 일반 헤더
      • CH07 HTTP 헤더2 - 캐시와 조건부 요청
      • (+) HTTPS 원리
    • 스프링 프레임워크 핵심 기술
      • CH01 IOC 컨테이너
      • CH02 AOP
      • (+) 스프링 의존성 관리
      • (+) 생성자 주입 장점
    • 코딩으로 학습하는 GoF의 디자인 패턴
      • 객체 생성
        • 싱글톤 패턴
        • 팩토리 메소드 패턴
        • 추상 팩토리 패턴
        • 빌더 패턴
        • 프로토타입 패턴
      • 구조
        • 어댑터 패턴
        • 브릿지 패턴
        • 컴포짓 패턴
      • 행동
        • (작성중)
    • 실전 Querydsl
      • CH01 프로젝트 환경구성
      • CH02 예제 도메인 모델
      • CH03 기본문법
      • CH04 중급 문법
      • CH05 실무활용 (스프링 데이터 JPA와 Querydsl)
      • CH06 스프링데이터JPA 가 제공하는 Querydsl 기능
      • (+) 별칭(alias)
      • (+) Slice 쿼리
    • 스프링 데이터 JPA
      • CH01 핵심개념이해 1
      • CH02 핵심개념이해 2
      • CH03 핵심개념이해 3
      • CH04 Spring Data Common
      • CH05 Spring Data JPA
    • 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
      • CH01 지연 로딩과 조회 성능 최적화
      • CH02 컬렉션 조회 최적화
      • CH03 전체 정리
    • 초보를 위한 쿠버네티스 안내서
      • CH01 쿠버네티스 시작하기
      • CH02 쿠버네티스 알아보기
      • CH03 쿠버네티스 실습 준비
      • CH04 쿠버네티스 기본 실습
    • Flutter Provider Essential
      • CH01 Introduction
      • CH02 Provider Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Bloc Essential
      • CH01 Introduction
      • CH02 Bloc Overview
      • CH03 TODO App
      • CH04 Weather App
      • CH05 Firebase Authentication App
    • Flutter Advanced Course - Clean Architecture With MVVM
      • CH01 Introduction
      • CH02 Clean Architecture 4 Layer
      • CH03 MVVM
      • CH04 Data Layer
      • (+) Data Layer - response to model
      • (+) Data Layer - Network
      • CH05 Domain Layer
      • CH06 Presentation Layer
      • CH07 Application Layer
      • (+) Application Layer - l10n
      • (+) Application Layer - DI
      • (+) Application Layer - environment
    • 자바 알고리즘 입문
      • CH01 문자열
      • CH02 Array(1, 2 차원 배열)
      • CH03 Two pointers, Sliding window[효율성: O(n^2)-->O(n)]
      • CH04 HashMap, TreeSet (해쉬, 정렬지원 Set)
      • CH05 Stack, Queue(자료구조)
      • CH06 Sorting and Searching(정렬, 이분검색과 결정알고리즘)
      • CH07 Recursive, Tree, Graph(DFS, BFS 기초)
      • CH08 DFS, BFS 활용
      • CH09 Greedy Algorithm
      • CH10 dynamic programming(동적계획법)
  • 도서
    • 만들면서 배우는 클린 아키텍처
      • 학습목표
      • CH01 계층형 아키텍처의 문제는 무엇일까?
      • CH02 의존성 역전하기
      • CH03 코드 구성하기
      • CH04 유스케이스 구현하기
      • CH05 웹 어댑터 구현하기
      • CH06 영속성 어댑터 구현하기
      • CH07 아키텍처 요소 테스트하기
      • CH08 경계 간 매핑하기
      • CH09 어플리케이션 조립하기
      • CH10 아키텍처 경계 강제하기
      • CH11 의식적으로 지름길 사용하기
      • CH12 아키텍처 스타일 결정하기
    • 클린 아키텍처
      • 들어가며
      • 1부 소개
        • 1장 설계와 아키텍처란?
        • 2장 두 가지 가치에 대한 이야기
      • 2부 벽돌부터 시작하기: 프로그래밍 패러다임
        • 3장 패러다임 개요
        • 4장 구조적 프로그래밍
        • 5장 객체 지향 프로그래밍
        • 6장 함수형 프로그래밍
      • 3부 설계 원칙
        • 7장 SRP: 단일 책임 원칙
        • 8장 OCP: 개방-폐쇄 원칙
        • 9장 LSP: 리스코프 치환 원칙
        • 10장 ISP: 인터페이스 분리 원칙
        • 11장 DIP: 의존성 역전 원칙
      • 4부 컴포넌트 원칙
        • 12장 컴포넌트
        • 13장 컴포넌트 응집도
        • 14장 컴포넌트 결합
      • 5부
        • 15장 아키텍처란?
    • 스프링 입문을 위한 자바 객체 지향의 원리와 이해
      • CH01 사람을 사랑한 기술
      • CH02 자바와 절차적/구조적 프로그래밍
      • CH03 자바와 객체 지향
      • (+) 자바 코드 실행에 따른 메모리 적재과정
      • CH04 자바가 확장한 객체 지향
      • CH05 객체 지향 설계 5 원칙 - SOLID
      • CH06 스프링이 사랑한 디자인 패턴
      • CH07 스프링 삼각형과 설정 정보
      • (부록) 람다(lambda)
    • 객체지향의 사실과 오해
      • CH01 협력하는 객체들의 공동체
      • CH02 이상한 나라의 객체
      • CH03 타입과 추상화
      • CH04 역할, 책임, 협력
      • CH05 책임과 메시지
      • CH06 객체 지도
      • CH07 함께 모으기
      • (+) 인터페이스 개념 바로잡기
    • 도메인 주도 개발 시작하기
      • CH01 도메인 모델 시작하기
      • CH02 아키텍처 개요
      • CH03 애그리거트
      • CH04 리포지터리와 모델 구현
      • CH05 스프링 데이터 JPA를 이용한 조회 기능
      • CH06 응용 서비스와 표현 영역
      • CH07 도메인 서비스
      • CH08 애그리거트 트랜잭션 관리
      • CH09 도메인 모델과 바운디드 컨텍스트
      • CH10 이벤트
      • CH11 CQRS
    • 자바 ORM 표준 JPA 프로그래밍
      • CH01 JPA 소개
      • CH02 JPA 시작
      • CH03 영속성 관리
      • CH04 엔티티 매핑
      • CH05 연관관계 매핑 기초
      • CH06 다양한 연관관계 매핑
      • CH07 고급 매핑
      • CH08 프록시와 연관관계 관리
      • CH09 값 타입
      • CH10 객체지향 쿼리 언어
      • CH11 웹 애플리케이션 제작
      • CH12 스프링 데이터 JPA
      • CH13 웹 애플리케이션과 영속성 관리
      • CH14 컬렉션과 부가 기능
      • CH15 고급 주제와 성능 최적화
      • CH16 트랜잭션과 락, 2차 캐시
    • 소프트웨어 세상을 여는 컴퓨터과학
      • CH01 컴퓨터 과학 소개
      • CH02 데이터 표현과 디지털 논리
    • 이펙티브 자바
      • 1 장 들어가기
      • 2장 객체 생성과 파괴
        • [01] 생성자 대신 정적 팩터리 메서드를 고려하라
        • [02] 생성자에 매개변수가 많다면 빌더를 고려하라
        • [03] private 생성자나 열거 타입으로 싱글턴임을 보증하라
        • [04] 인스턴스화를 막으려거든 private 생성자를 사용하라
        • [05] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
        • [06] 불필요한 객체 생성을 피하라
        • [07] 다 쓴 객체 참조를 해제하라
        • [08] finalizer 와 cleaner 사용을 피하라
        • [09] try-finally 보다는 try-with-resources 를 사용하라
      • 3장 모든 객체의 공통 메서드
        • [10] equals는 일반 규약을 지켜 재정의하라
        • [11] equals 를 재정의하려거든 hashCode도 재정의하라
        • [12] toString 을 항상 재정의하라
        • [13] clone 재정의는 주의해서 진행하라
        • [14] Comparable 을 구현할지 고려하라
      • 4장 클래스와 인터페이스
        • [15] 클래스와 멤버의 접근 권한을 최소화하라
  • 토픽
    • 서버 모니터링
      • CPU 사용량
      • 메모리 사용량
      • 스레드 풀
    • Spring Boot Monitoring
      • Spring actuator
      • Spring eureka
      • Prometheus
      • grafana
      • Spring actuator + Prometheus + grafana
    • JAVA 데일리 토픽
      • 메모리 누수(memory leak)
      • 객체 참조의 유형
      • 커스텀 스레드 풀
      • Mark And Compact
      • serialVersionUID 이해하기
      • 함수형 인터페이스
      • 메소드 참조
      • equals()와 hashCode()가 무엇이고 역할이 무엇인지
      • StringBuffer vs StringBuilder
      • String vs StringBuilder, StringBuffer
      • String interning
    • JAVA GC
    • 프로그래머스 문제 풀기
      • 해시
      • 스택/큐
      • 힙(Heap)
      • 정렬
      • 완전탐색
      • DFS/BFS
    • 데이터베이스 구성 및 작동 흐름
    • 데이터베이스 JOIN 원리
    • 객체지향생활체조 원칙
    • 상태(state), 상속(inheritance), 합성(composition) 의 상관관계
    • java enum은 메모리에 언제, 어떻게 할당되는가
    • Checked Exception vs UnChecked Exception
    • Reactive Streams 원리탐구 - 간단한 예제 직접 작성해보기
    • Flutter Basic
    • Flutter StatefulWidget 생명주기
    • Flutter 가 위젯을 그리는 원리
    • Flutter 클린 아키텍처
      • application layer
        • 패키지 구조 및 레이어 설명
        • environment
        • dependency injection
        • go_router
        • foreground & background
        • 다국어처리 (l10n, i18n)
        • Global 처리(시스템 점검, fore->back 등)
        • connection_manager
        • permission_manager
        • push_notification_manager
        • firebase 연동
      • data layer
        • 패키지 구조 및 레이어 설명
        • network
        • repository
      • domain layer
        • 패키지 구조 및 레이어 설명
      • presentation layer
        • 패키지 구조 및 레이어 설명
        • resources
    • 기술 관련 포스팅 읽기
  • 기타
    • 작업일지
      • 2023. 10
      • 2023. 09
      • 2023. 08
      • 2023. 07
      • 2023. 06
      • 2023. 05
      • 2023. 04
      • 2023. 03
      • 2023. 02
      • 2023. 01
      • 2022. 12
    • Business Model
      • 아이디어 불패의 법칙
      • 린 모바일 앱 개발
      • 린 스타트업
      • 제로투원
      • MIT 스타트업 바이블
      • 린치핀
    • 백로그 종합
Powered by GitBook
On this page
  1. 강의
  2. 자바 알고리즘 입문

CH01 문자열

Previous자바 알고리즘 입문NextCH02 Array(1, 2 차원 배열)

Last updated 1 year ago

package string;

import java.util.Scanner;

public class StringMain {
    public int solution(String string, char t) {
        final String upperCaseString = string.toUpperCase();
        final char targetCharacter = Character.toUpperCase(t);
        int result = 0;
        for (char c : upperCaseString.toCharArray()) {
            if (c == targetCharacter) result++;
        }
        return result;
    }

    public static void main(String[] args) {
        StringMain T = new StringMain();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        char c = kb.next().charAt(0);
        System.out.println(T.solution(str, c));
    }
}

package string;

import java.util.Scanner;

public class StringMain2 {
    public String solution(String string){
        StringBuilder result = new StringBuilder();
        for(char character : string.toCharArray()){
            if(Character.isLowerCase(character)){
                result.append(String.valueOf(character).toUpperCase());
            }else {
                result.append(String.valueOf(character).toLowerCase());
            }
        }
        return result.toString();
    }
    public static void main(String[] args) {
        StringMain2 T = new StringMain2();
        Scanner sc = new Scanner(System.in);
        String string = sc.next();
        System.out.println(T.solution(string));
    }
}

package string;

import java.util.Scanner;

public class StringMain3 {

    public String solution(String statement){
        String longestWord = "";
        String[] words = statement.split(" ");
        for(String word : words){
            if(word.length() > longestWord.length()){
                longestWord = word;
            }
        }

        return longestWord;
    }
    public static void main(String[] args) {
        StringMain3 T = new StringMain3();
        Scanner scanner = new Scanner(System.in);
        String statement = scanner.nextLine();
        System.out.println(T.solution(statement));
    }
}

package string;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StringMain4 {

    public void solution2(List<String> strings) {
        for (String str : strings) {
            StringBuilder stringBuilder = new StringBuilder(str);
            System.out.println(stringBuilder.reverse());
        }

        for (String str : strings) {
            int length = str.length();
            StringBuilder result = new StringBuilder();
            for (int i = length - 1; i >= 0; i--) {
                result.append(str.charAt(i));
            }
            System.out.println(result);
        }
    }

    public void solution(List<String> strings) {
        for (String str : strings) {
            char[] chars = str.toCharArray();
            int leftIndex = 0;
            int rightIndex = chars.length - 1;
            while (leftIndex < rightIndex) {
                char tmp = chars[leftIndex];
                chars[leftIndex] = chars[rightIndex];
                chars[rightIndex] = tmp;
                leftIndex++;
                rightIndex--;
            }
            System.out.println(chars);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        List<String> strings = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            String temp = scanner.next();
            strings.add(temp);
        }
        StringMain4 T = new StringMain4();
        T.solution(strings);
    }
}

package string;

import java.util.Scanner;

public class StringMain5 {
    public void solution(String str) {
        char[] chars = str.toCharArray();
        int leftIndex = 0;
        int rightIndex = chars.length - 1;
        while (leftIndex < rightIndex) {
            if (!Character.isAlphabetic(chars[leftIndex])) {
                leftIndex++;
                continue;
            }

            if (!Character.isAlphabetic(chars[rightIndex])) {
                rightIndex--;
                continue;
            }

            char temp = chars[leftIndex];
            chars[leftIndex] = chars[rightIndex];
            chars[rightIndex] = temp;
            leftIndex++;
            rightIndex--;

        }
        System.out.println(chars);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.next();
        StringMain5 T = new StringMain5();
        T.solution(string);
    }
}
package string;

import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;

public class StringMain6 {

    public void solution2(String str) {
        Set<Character> charsSet = new LinkedHashSet<>();
        char[] chars = str.toCharArray();
        for (char c : chars) {
            charsSet.add(c);
        }
        StringBuilder stringBuilder = new StringBuilder();
        charsSet.forEach(stringBuilder::append);
        System.out.println(stringBuilder);
    }

    public void solution(String str) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            int originalIndex = i;
            int firstIndex = str.indexOf(str.charAt(i));
            if (originalIndex == firstIndex) {
                stringBuilder.append(str.charAt(i));
            }
        }

        System.out.println(stringBuilder);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringMain6 T = new StringMain6();
        T.solution(str);
    }
}
package string;

import java.util.Scanner;

public class StringMain7 {
    public void solution2(String str) {
        char[] chars = str.toLowerCase().toCharArray();
        int leftIndex = 0;
        int rightIndex = chars.length - 1;
        boolean isSame = true;
        while (leftIndex < rightIndex) {
            if (chars[leftIndex] != chars[rightIndex]) {
                isSame = false;
                System.out.println("NO");
                break;
            }
            leftIndex++;
            rightIndex--;
        }

        if (isSame) {
            System.out.println("YES");
        }
    }

    public void solution(String str) {
        String original = str.toLowerCase();
        String reversed = new StringBuilder(str.toLowerCase()).reverse().toString();
        if (original.equals(reversed)) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringMain7 T = new StringMain7();
        T.solution(str);
    }
}
package string;

import java.util.Scanner;

public class StringMain8 {
    public void solution2(String str) {
        String converted = str.toUpperCase().replaceAll("[^A-Z]", "");
        String reversed = new StringBuilder(converted).reverse().toString();
        if (converted.equals(reversed)) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }

    public void solution(String str) {
        String converted = str.toUpperCase().replaceAll("[^A-Z]", "");
        char[] chars = converted.toCharArray();
        int left = 0;
        int right = chars.length - 1;
        while (left < right) {
            if (chars[left] != chars[right]) {
                System.out.println("NO");
                return;
            }
            left++;
            right--;
        }

        System.out.println("YES");
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        StringMain8 T = new StringMain8();
        T.solution(str);
    }
}

package string;

import java.util.Scanner;

public class StringMain9 {
    public void solution(String str) {
        String converted = str.replaceAll("[^0-9]", "");
        int result = Integer.parseInt(converted);
        System.out.println(result);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringMain9 T = new StringMain9();
        T.solution(str);
    }
}

package string;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StringMain10 {

    public void solution2(String string, String targetString) {
        char[] chars = string.toCharArray();
        char target = targetString.toCharArray()[0];

        int distance = chars.length;
        int[] distances = new int[chars.length];
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] != target) {
                distances[i] = distance;
            } else {
                distance = 0;
                distances[i] = distance;
            }
            distance++;
        }

        distance = chars.length;
        for (int i = chars.length - 1; i >= 0; i--) {
            if (chars[i] != target) {
                int currentDistance = distances[i];
                int newDistance = distance;

                distances[i] = Math.min(currentDistance, newDistance);
//                if (currentDistance < newDistance) {
//                    distances[i] = currentDistance;
//                } else {
//                    distances[i] = newDistance;
//                }

            } else {
                distance = 0;
                distances[i] = distance;
            }
            distance++;
        }

        StringBuilder stringBuilder = new StringBuilder();
        for (int d : distances) {
            stringBuilder.append(d).append(" ");
        }
        System.out.println(stringBuilder.toString().trim());
    }

    public void solution(String string, String target) {
        char[] chars = string.toCharArray();
        char targetChar = target.toCharArray()[0];

        final List<Integer> targetIndex = new ArrayList<>();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == targetChar) {
                targetIndex.add(i);
            }
        }

        final List<Integer> distances = new ArrayList<>();
        for (int i = 0; i < chars.length; i++) {
            int min = chars.length - 1;
            for (Integer index : targetIndex) {
                int temp = 0;
                if (index > i) {
                    temp = index - i;
                } else {
                    temp = i - index;
                }

                if (temp < min) {
                    min = temp;
                }
            }
            distances.add(min);
        }

        StringBuilder stringBuilder = new StringBuilder();
        distances.forEach(distance -> {
            stringBuilder.append(distance).append(" ");
        });
        String result = stringBuilder.toString().trim();
        System.out.println(result);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        String[] strings = string.split(" ");
        StringMain10 T = new StringMain10();
        T.solution2(strings[0], strings[1]);
    }
}

package string;

import java.util.Scanner;

public class StringMain11 {

    public void solution2(String originalString) {
        String appendedEmptyString = originalString + " ";
        char[] chars = appendedEmptyString.toCharArray();
        int count = 1;

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < chars.length - 1; i++) {
            char currentChar = chars[i];
            char nextChar = chars[i + 1];
            if (currentChar == nextChar) {
                count++;
            } else {
                if (count != 1) {
                    result.append(currentChar).append(count);
//                    count = 1;
                } else {
                    result.append(currentChar);
                }
                count = 1;
            }
        }

        System.out.println(result);
    }

    public void solution(String str) {
        char[] chars = str.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append(chars[0]);
        int count = 1;

        char lastChar = chars[0];
        for (int i = 1; i < chars.length; i++) {
            char currentChar = chars[i];
            if (lastChar == currentChar) {
                count++;
            } else {
                if (count != 1) {
                    stringBuilder.append(count);
                    count = 1;
                }

                stringBuilder.append(currentChar);
                lastChar = currentChar;
            }

            if (i == chars.length - 1) {
                if (count != 1) {
                    stringBuilder.append(count);
                }
            }
        }

        System.out.println(stringBuilder);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringMain11 T = new StringMain11();
        T.solution2(str);
    }

}
package string;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StringMain12 {

    public void solution(String str) {
        char[] chars = str.toCharArray();
        List<String> strings = new ArrayList<>();
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < chars.length; i++) {
            if (stringBuilder.length() != 0 && stringBuilder.length() % 7 == 0) {
                strings.add(stringBuilder.toString());
                stringBuilder = new StringBuilder();
            }
            stringBuilder.append(chars[i]);

            if (i == chars.length - 1) {
                strings.add(stringBuilder.toString());
            }
        }

        StringBuilder result = new StringBuilder();
        strings.stream()
                .map(tmpStr -> {
                    tmpStr = tmpStr.replace("#", "1");
                    tmpStr = tmpStr.replace("*", "0");
                    return tmpStr;
                })
                .map(binary -> {
                    char[] binaries = binary.toCharArray();
                    int resultInt = 0;
                    for (int i = binaries.length - 1; i >= 0; i--) {
                        int target = Integer.parseInt(String.valueOf(binaries[i]));
                        double multiple = Math.pow(2, binaries.length - (i + 1));
                        resultInt += target * multiple;
                    }
                    return (char) resultInt;
                })
                .forEach(result::append);
        System.out.println(result);
    }

    private static char convertToString(String binary) {
        char[] chars = binary.toCharArray();
        int result = 0;
        for (int i = chars.length - 1; i >= 0; i--) {
            int target = Integer.parseInt(String.valueOf(chars[i]));
            double multiple = Math.pow(2, chars.length - (i + 1));
            result += target * multiple;
        }
        return (char) result;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.next();
        String str = scanner.next();
        StringMain12 T = new StringMain12();
        T.solution(str);
    }
}
package string;

import java.util.Scanner;

public class StringMain12New {

    public void solution(int count, String str) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < count; i++) {
            String binary = str.substring(0, 7).replace("#", "1").replace("*", "0");
            int code = Integer.parseInt(binary, 2);
            String targetChar = String.valueOf((char) code);
            stringBuilder.append(targetChar);
            str = str.substring(7);
        }
        System.out.println(stringBuilder);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        String string = scanner.next();
        StringMain12New T = new StringMain12New();
        T.solution(count, string);
    }
}