์ „์ฒด ๊ธ€ (165)

๋ฐ˜์‘ํ˜•
11
05

 

ํšŒ๋ฌธ ์กฐ๊ฑด์ด ๋งž๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๋Š” ์‰ฝ์ง€๋งŒ StringBuffer์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ๋กํ•œ๋‹ค.

String input = sc.next();
StringBuffer sb = new StringBuffer(input);
String reversed = sb.reverse().toString();
if(input.equals(reversed)){
    System.out.printf("#%d %d\n", test_case, 1);
}else{
    System.out.printf("#%d %d\n", test_case, 0);
}

์ด์ „์— nextLine()์„ ์‚ฌ์šฉํ•ด์„œ String๊ฐ’์„ ๋ฐ›์•„์™”์„๋•Œ, nextLine์ด ์ค„๋ฐ”๊ฟˆ์„ ๋ฐ›์•„๋“ค์—ฌ null์„ ๋จผ์ € ๊ฐ€์ ธ๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. Scanner์˜ next()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž์—ด ํ•˜๋‚˜๋งŒ์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด sc.nextLine()์œผ๋กœ ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž๋ฅผ ๋‚ ๋ฆด ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

 

StringBuffer์— ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ค‘ reverse๊ฐ€ ์žˆ๋‹ค.

@Override
public synchronized StringBuffer reverse() {
    toStringCache = null;
    super.reverse();
    return this;
}

stringbuffer์— ์žˆ๋Š” ๊ฒƒ์„ ๋’ค์ง‘์–ด StringBuffer ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋‹จ์ˆœ ๋ฌธ์ž์—ด์ด ํšŒ๋ฌธ์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ์ด๊ฒƒ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€๋ฆฐ๋‹ค.

StringBuffer ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— toString์œผ๋กœ ํƒ€์ž…์บ์ŠคํŒ…ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋นผ๋จน์œผ๋ฉด ์•ˆ๋œ๋‹ค. StringBuffer๋ฅผ ๊นŒ๋ณด๋ฉด์„œ ์•Œ๊ฒŒ๋œ insert, indexOf๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋“ค๋„ ๋‚˜์ค‘์— ์œ ์šฉํ•˜๊ฒŒ ์จ๋ณด๋„๋กํ•˜๊ฒ ๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^
๋ฐ˜์‘ํ˜•
COMMENT
 
11
01

 

1928. Base64 Decode ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ์ •๋‹ต๋ฅ ์ด ๊ต‰์žฅํžˆ ๋†’๋‹ค.

ํ•œ๋งˆ๋””๋กœ Base64 ์ธ์ฝ”๋”ฉ ๋œ ๋ฌธ์ž์—ด์„ ๋””์ฝ”๋”ฉํ•ด์„œ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋ผ์„œ java.util.Base64 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์“ฐ๋Š” ๊ฑด ๋ช‡ ์ค„๋กœ ํ’€๋ฆฌ๋‹ˆ๊นŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ๊ตฌํ˜„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜ ๋ดค๋‹ค.

 

final String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int[] base64Mapping = new int[64];

for (int i = 0; i < base64Chars.length(); i++) {
    base64Mapping[base64Chars.charAt(i)] = i;
}

StringBuilder result = new StringBuilder();
int accum = 0;
int count = 0;

for (char c : base64EncodedString.toCharArray()) {
        accum = (accum << 6) | base64Mapping[c];
        count++;
        if (count == 4) {
            result.append((char) (accum >> 16));
            result.append((char) ((accum >> 8) & 0xFF));
            result.append((char) (accum & 0xFF));
            accum = 0;
            count = 0;
        }
}

 

๋””์ฝ”๋”ฉ์„ ํ•˜๋ ค๋ฉด ๋‹น์—ฐํžˆ ๋Œ€์น˜ํ‘œ๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค. base64Chars๋ฅผ base64Mapping์œผ๋กœ ๋„ฃ๋Š”๊ฒŒ ํ‘œ๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ž‘์—…์ด๋‹ค. Base64์—์„œ = ๋Š” ๋์„ ์•Œ๋ ค์ฃผ๋Š” ๋ฌธ์ž์ธ๋ฐ ์ด๊ฑด ๊ณ ๋ คํ•˜์ง€์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ ํŒจ๋”ฉ๋„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์ˆœ์ˆ˜ ๊ตฌํ˜„๋งŒ ๋ณด๋„๋ก ํ•˜์ž.

Text content M a n
ASCII 77 97 110
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Index 19 22 5 46
Base64-Encoded T W F u

 

์ธ์ฝ”๋”ฉ ๊ณผ์ •์ด๋‹ค. ASCII๋กœ ๋ณ€ํ™˜ํ•œ ๋ฌธ์ž์—ด์„ 8bit๋กœ ๋ฐ”๊พผ๋‹ค์Œ, 6๋น„ํŠธ๋กœ ๋Š์–ด์„œ ํ‘œ์— ๋„ฃ์–ด ๋Œ๋ฆฐ๋‹ค.(์œ„์—์„œ ํฌ๊ธฐ 64์งœ๋ฆฌ ๋ฐฐ์—ด)

๊ทธ๋Ÿผ ๋””์ฝ”๋”ฉ ๊ณผ์ •์€ ์—ญ์ˆœ์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด๋œ๋‹ค. accum << 6 | base64Mapping[c]๊ฐ€ ๊ทธ ์—ฐ์‚ฐ์ด๋‹ค.

 

count๋ฅผ ์“ฐ๋Š”๊ฑด 6*4 -> 8*3์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋œ๋‹ค. ์ฆ‰ 24bit์งœ๋ฆฌ ๋ฒ„ํผ๋ฅผ ํ•˜๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๋น„ํŠธ์—ฐ์‚ฐ์ด๋‹ค.

  1. count๊ฐ€ 4๊ฐ€ ๋๋‹ค๋Š”๊ฑด accum์— 24๋น„ํŠธ๊ฐ€ ์ฐจ์žˆ๋‹ค๋Š” ๋ง
  2. accum์˜ ์ƒ์œ„ 8bit๋ฅผ char๋กœ ๋ฐ”๊ฟ”์„œ ์ถ”๊ฐ€
  3. ๊ทธ๋‹ค์Œ 8bit์„ char๋กœ ๋ฐ”๊ฟ”์„œ ์ถ”๊ฐ€, & 0xFF๋Š” 64bit 2์ง„ํ‘œ์‹œ๋กœ 0000000011111111์ธ๋ฐ AND์—ฐ์‚ฐ์„ ํ†ตํ•ด 8bit๋กœ ์ค„์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  4. ๋‚จ์€ accum 8bit๋„ ์ฒ˜๋ฆฌํ•ด์คฌ์œผ๋ฉด, accum, count์— 0์„ ๋„ฃ์–ด ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ด๋‹ค๋ฉด

import java.util.Base64;

String input = sc.nextLine();
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(input);
String decodedString = new String(decodedBytes, "UTF-8");

 

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ต์ˆ™ํ•˜์ง€์•Š์€ Base64.Decoder ์ด ๋ถ€๋ถ„์„ ๊ธฐ์–ตํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ํ‘œ์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค ํ•„์š”๋„ ์—†๊ณ  ๋‚˜๋จธ์ง€ ์ž‘์—…๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค ์•Œ์•„์„œ ํ•ด์ค€๋‹ค.

 

์ถœ์ฒ˜: https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464
๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT
 
10
28

์ž…๋ ฅ์ด ์•ˆ๋˜๋ฉด ๋นˆ์ค„์„ ์žก์ง„ ์•Š๋Š”์ง€ ํ™•์ธํ•˜์ž

sc.nextLine();
br.readLine();

๋นˆ ์ค„์„ ์ด๋ ‡๊ฒŒ ๋‚ ๋ ค์„œ ์˜ฌ๋ฐ”๋ฅธ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ” ์†Œ์ˆ˜์  ์ถœ๋ ฅํ•˜๊ธฐ

printf๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์กฐ์ž‘ํ•˜๊ธฐ ํŽธํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

System.out.printf("%.3f", floatVal);

์ด๋Ÿฌ๋ฉด ์†Œ์ˆ˜์  ์„ธ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค, ๋„ค๋ฒˆ์งธ ์ž๋ฆฌ๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ ์„ธ์ž๋ฆฌ๋กœ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

System.out.printf("%d", Math.round(floatVal));

Math.round๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์ˆ˜์ ์„ ์™„์ „ํžˆ ๋ฐ˜์˜ฌ๋ฆผํ•ด์ค€๋‹ค. Math์˜ ๋‚ด์žฅํ•จ์ˆ˜์™€ ์ต์ˆ™ํ•˜๊ฒŒ ์ง€๋‚ด์•ผ๊ฒ ๋‹ค. abs๋‚˜ min, max ๋“ฑ ๋กœ์ง์„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ์ž”๋œฉ์žˆ๋‹ค.

substring()

System.out.println(str.substring(2));
System.out.println(str.substring(1,3));

substring์€ ๋ฌธ์ž์—ด ์ž๋ฅด๋Š” ๋„๊ตฌ๋‹ค. ๋ฒ”์œ„๋Š” [ ) ์ด๊ณ , parameter๋ฅผ ํ•˜๋‚˜๋งŒ ์ฃผ๋Š” ๊ฒฝ์šฐ์—๋Š” startIndex๋ฅผ ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ํ•ด๋‹น index๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

String ๋ฐฐ์—ด์„ Int๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ธฐ

int[] intArr = Stream.of(arr).mapToInt(Integer::parseInt).toArray();

Stream์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์›์‹œํƒ€์ž… int ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ฝ”๋“œ๋‹ค. split์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” list๊ฐ€ String Array์ด๋ผ์„œ Int๋ฐฐ์—ด์ด ํ•„์š”ํ•  ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. ์ด๊ฒŒ ๊ธฐ์–ต์ด ์•ˆ๋‚˜๋ฉด ๊ทธ๋ƒฅ for๋ฌธ ๋Œ๋ ค์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.(์ŠคํŠธ๋ฆผ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ for๋ฌธ์„ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์ฝ”ํ‹€๋ฆฐ์˜ map์ด ๊ฐ„์ ˆํ•ด์ง€๋Š” ์ฝ”๋“œ๋‹ค...)

 

๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT
 
10
21

https://www.acmicpc.net/problem/10448

 

10448๋ฒˆ: ์œ ๋ ˆ์นด ์ด๋ก 

ํ”„๋กœ๊ทธ๋žจ์€ ํ‘œ์ค€์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๋Š” ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ํ•œ ์ค„์— ์ž์—ฐ์ˆ˜ K (3 ≤ K ≤ 1,000)๊ฐ€ ํ•˜๋‚˜์”ฉ ํฌํ•จ๋˜์–ด์žˆ๋Š” T๊ฐœ์˜ ๋ผ์ธ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด

www.acmicpc.net

 

import java.io.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int size = Integer.parseInt(br.readLine());
        int[] tri = new int[50];
        // 1~1000๋„˜์–ด๊นŒ์ง€์˜ ์‚ผ๊ฐ์ˆ˜ ๋ชจ๋‘ ์ €์žฅ
        for(int i=1; i<=50; i++){
            tri[i-1] = (i*(i+1))/2;
        }

        for(int i=0;i<size;i++){
            int target = Integer.parseInt(br.readLine());
            sb.append(check(target, tri)).append("\n");
        }

        System.out.println(sb);
    }
    static int check(int target, int[] tri){
        for(int i=0; i<50;i++){
            for(int j=i+1;j<50;j++){
                for(int k=j+1;k<50;k++){
                    if(tri[i]+tri[j]+tri[k] == target) return 1;
                }
            }
        }
        return 0;
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

K๊ฐ€ ์ž‘์œผ๋‹ˆ ์‚ผ๊ฐ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ•ด์„œ ๋ฐฐ์—ด๋กœ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ , ์‚ผ์ค‘ํฌ๋ฌธ์„ ๋Œ๋ ค์„œ ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค๊ณ  ๋ฐ”๋กœ ๋– ์˜ฌ๋ž๋‹ค.

๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ์ฝ์ง€์•Š์•„ ์ค‘๋ณตํ•ด์„œ ์‚ผ๊ฐ์ˆ˜ ์„ธ๊ฐœ๋ฅผ ๋”ํ•˜๋Š” ๊ฒƒ์„ ๋†“์ณ ํ‹€๋ ธ๋‹ค...


์ •๋‹ต์ฝ”๋“œ

import java.io.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int size = Integer.parseInt(br.readLine());
        int[] tri = new int[50];
        // ๋Œ€๋žต 1~1000๊นŒ์ง€์˜ ์‚ผ๊ฐ์ˆ˜ ๋ชจ๋‘ ์ €์žฅ
        for(int i=1; i<=50; i++){
            tri[i-1] = (i*(i+1))/2;
        }

        for(int i=0;i<size;i++){
            int target = Integer.parseInt(br.readLine());
            sb.append(check(target, tri)).append("\n");
        }

        System.out.println(sb);
    }
    static int check(int target, int[] tri){
        for(int i=0; i<50;i++){
            for(int j=0;j<50;j++){
                for(int k=0;k<50;k++){
                    if(tri[i]+tri[j]+tri[k] == target) return 1;
                }
            }
        }
        return 0;
    }
}

์‚ผ์ค‘ํฌ๋ฌธ์„ ๋Œ ๋•Œ, ์„ธ ์ˆ˜๊ฐ€ ์ค‘๋ณต๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

"๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค"

 

๋ฐ˜์‘ํ˜•
COMMENT