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++ 빌더 패턴
  • SW역량테스트파이썬
  • 삼성코테준비
  • 삼성코테구현풀이
  • 삼성코테기출자바풀이
  • 삼성코테자바준비
  • ARIMA모형
  • BOJ파이썬풀이
  • 삼성코테자바풀이
  • MA모형
  • 시계열분석
  • 카카오코테
  • 삼성코테기출
  • 코테파이썬
  • 삼성코테파이썬준비
  • 삼성코테파이썬풀이
  • 통계학
  • 카카오코테java풀이
  • 운영체제인터럽트
  • SW역량테스트파이썬풀이
  • 시계열
  • Arima
  • 백준파이썬풀이
  • AR모형
  • 삼성코테파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

알고리즘/알고리즘문풀

BOJ - 단어 수학 1339번 (JAVA)

2023. 1. 12. 15:19

❓ 문제 - 백준 단어 수학 1339번 - JAVA 풀이법

출처

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

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

 

 

 

📝 문제해결법

1. 문제

  • 알파벳 대문자를 0~9의 숫자로 치환할 때, 모든 알파벳을 더한 값이 최대값이 되도록 각 알파벳에 할당될 숫자를 정해야한다.
  • 따라서 선정된 알파벳 숫자에 의해 더한 값의 최대값을 정답으로 출력한다.

 

2. 해결 방법

  • 그리디 알고리즘의 방법으로 문제를 접근한다.
  • 각 알파벳은 각각의 자릿수가 있으므로 주어진 알파벳 인덱스에 해당하는 곳에 자릿수를 계속 더한다.
 예를 들어, ABC 라고 할 때
A는 alpha 인덱스에 0번이고 alpha[0]에는 100이 더해져 있다.
B는 alpha 인덱스에 1번이고 alpha[1]에는 10이 더해져 있다.
C는 alpha 인덱스에 2번이고 alpha[2]에는 1이 더해져 있다.

다음 AB를 입력받는다면,
alpha[0] += 10
alpha[1] += 1

이 더해진 상태로 되어 있을 것이다.
  • 위와 같은 상태로 alpha를 계속 더한 후에, alpha를 정렬해주고 값이 가장 큰 값부터 숫자 9 부터 할당해준다.
  • 따라서 숫자를 할당해준 후, 각 자릿수에 있는 숫자 x 자릿수 값 x 할당된 값을 answer에 계속 더해가면 답을 구할 수 있게된다.

 

 

3. 느낀점

  • 처음에 리스트랑, 해쉬를 사용해서 구현이 복잡하도록 풀이를 생각했는데.. 이건 도저히 아닌 것 같아서 다른 사람들의 풀이를 봤다. 그리디 알고리즘 답게 심플한 풀이법을 잡아서 해결해야했다...
  • 그리디 문제들을 많이 풀면서 해결방법의 센스를 좀 높이도록 노력해야지..!

 

 

💻 소스코드 (JAVA)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;


public class Main_1339 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        long[] alpha = new long[26];
        for(int i=0;i<n;i++){
            String str = br.readLine();
            for(int j=0;j<str.length();j++){
                alpha[str.charAt(j) - 'A'] += Math.pow(10, str.length()-j-1);
            }
        }

        Arrays.sort(alpha);
        int num = 9;
        long answer = 0;
        for(int i=25;i>=0;i--){
            if(alpha[i] == 0) continue;
            String s = String.valueOf(alpha[i]);
            char[] c = s.toCharArray();
            for(int j=0;j<c.length;j++){
                if(c[j] == '0') continue;
                answer += (c[j]-'0') * num * Math.pow(10, c.length-j-1);
            }
            num--;
        }

        System.out.println(answer);


    }
}

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

BOJ - 수들의 합4 2015번 (JAVA)  (7) 2022.12.07
BOJ - 거짓말 1043번 (JAVA)  (0) 2022.12.06
2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 (JAVA)  (0) 2022.12.01
프로그래머스 코딩테스트 연습 - 여행경로 (JAVA)  (0) 2022.11.29
프로그래머스 코딩테스트 연습 - 카펫 (JAVA)  (0) 2022.11.22
    '알고리즘/알고리즘문풀' 카테고리의 다른 글
    • BOJ - 수들의 합4 2015번 (JAVA)
    • BOJ - 거짓말 1043번 (JAVA)
    • 2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 (JAVA)
    • 프로그래머스 코딩테스트 연습 - 여행경로 (JAVA)
    developer-ellen
    developer-ellen

    티스토리툴바